在 puppeteer 中按下 Enter 按钮
Pressing Enter button in puppeteer
在 puppeteer 中按 enter 似乎没有任何效果。但是,当我按下其他键时,它会执行应有的操作。
这有效:
await page.press('ArrowLeft');
这不是:
await page.press('Enter');
这是输入的样子:
有什么想法吗?
编辑:我也试过 page.keyboard.down & page.keyboard.up 来确定。
await page.type(String.fromCharCode(13));
使用 this site 我注意到 page.type
会调度 beforeinput
和 input
事件,但 page.press
不会。这可能是一个错误,但幸运的是发送回车键码 (13) 似乎有效,所以我们现在可以解决它。
我经常使用 page.keyboard.press('Enter');
:) 适合我。
查看文档 here。我认为您应该在 .press
之前使用 .keyboard
才能正常工作。
page.keyboard.press():
您可以使用page.keyboard.press()
来模拟按下回车键。以下任何选项都应该有效:
await page.keyboard.press('Enter'); // Enter Key
await page.keyboard.press('NumpadEnter'); // Numeric Keypad Enter Key
await page.keyboard.press('\n'); // Shortcut for Enter Key
await page.keyboard.press('\r'); // Shortcut for Enter Key
elementHandle.press():
此外,您可以使用 page.$()
and elementHandle.press()
的组合在按 enter 之前关注一个元素:
await (await page.$('input[type="text"]')).press('Enter'); // Enter Key
await (await page.$('input[type="text"]')).press('NumpadEnter'); // Numeric Keypad Enter Key
await (await page.$('input[type="text"]')).press('\n'); // Shortcut for Enter Key
await (await page.$('input[type="text"]')).press('\r'); // Shortcut for Enter Key
page.type():
此外,您可以使用page.type()
:
await page.type(String.fromCharCode(13));
page.keyboard.type():
同样,您可以使用page.keyboard.type()
:
await page.keyboard.type(String.fromCharCode(13));
page.keyboard.sendCharacter():
另一种替代方法是使用 page.keyboard.sendCharacter()
方法:
await page.keyboard.sendCharacter(String.fromCharCode(13));
page.keyboard.down() / page.keyboard.up():
您还可以使用 page.keyboard.down()
and page.keyboard.up()
:
的组合
// Enter Key
await page.keyboard.down('Enter');
await page.keyboard.up('Enter');
// Shortcut for Enter Key
await page.keyboard.down('NumpadEnter');
await page.keyboard.up('NumpadEnter');
// Shortcut for Enter Key
await page.keyboard.down('\n');
await page.keyboard.up('\n');
// Shortcut for Enter Key
await page.keyboard.down('\r');
await page.keyboard.up('\r');
简短回答首先附加到输入控件可能是个好主意:
await page.type('#inp_srch_box', 'add');
await page.type('#inp_srch_box',String.fromCharCode(13));
长答案...
cat package.json
{
"name": "test-open-login",
"version": "0.7.9",
"description": "an example test to test the login of the qto app",
"main": "test-open-login.test.js",
"scripts": {
"test": "mocha --recursive test",
"server": "http-server src"
},
"license": "BSD",
"devDependencies": {
"mocha": "5.0.1",
"puppeteer": "^2.1.0"
},
"dependencies": {
"chai": "^4.2.0",
"http-server": "^0.12.1",
"mocha": "5.0.1"
}
}
cat test/test-login.spec.js
const puppeteer = require('puppeteer');
async function main(){
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.setViewport({width: 1200, height: 720})
await page.goto('https://qto.fi/qto/login', { waitUntil: 'networkidle0' });
// wait until
await page.type('#email', 'test.anonymous.user@gmail.com');
//await page.type('#pass', 'secret');
// click and wait for navigation
await page.waitFor(1000);
//await frame.waitFor(1000);
await Promise.all([
page.click('#butLogin'),
page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
await page.type('#inp_srch_box', 'add');
await page.type('#inp_srch_box',String.fromCharCode(13));
}
main();
是page.keyboard.press()
参考:https://pptr.dev/#?product=Puppeteer&version=v3.0.0&show=api-keyboardpresskey-options
在 https://github.com/puppeteer/puppeteer/blob/master/src/USKeyboardLayout.js
处查找键名和键码
await page.keyboard.press('Enter');
这对我有用
在 puppeteer 中按 enter 似乎没有任何效果。但是,当我按下其他键时,它会执行应有的操作。 这有效:
await page.press('ArrowLeft');
这不是:
await page.press('Enter');
这是输入的样子:
有什么想法吗?
编辑:我也试过 page.keyboard.down & page.keyboard.up 来确定。
await page.type(String.fromCharCode(13));
使用 this site 我注意到 page.type
会调度 beforeinput
和 input
事件,但 page.press
不会。这可能是一个错误,但幸运的是发送回车键码 (13) 似乎有效,所以我们现在可以解决它。
我经常使用 page.keyboard.press('Enter');
:) 适合我。
查看文档 here。我认为您应该在 .press
之前使用 .keyboard
才能正常工作。
page.keyboard.press():
您可以使用page.keyboard.press()
来模拟按下回车键。以下任何选项都应该有效:
await page.keyboard.press('Enter'); // Enter Key
await page.keyboard.press('NumpadEnter'); // Numeric Keypad Enter Key
await page.keyboard.press('\n'); // Shortcut for Enter Key
await page.keyboard.press('\r'); // Shortcut for Enter Key
elementHandle.press():
此外,您可以使用 page.$()
and elementHandle.press()
的组合在按 enter 之前关注一个元素:
await (await page.$('input[type="text"]')).press('Enter'); // Enter Key
await (await page.$('input[type="text"]')).press('NumpadEnter'); // Numeric Keypad Enter Key
await (await page.$('input[type="text"]')).press('\n'); // Shortcut for Enter Key
await (await page.$('input[type="text"]')).press('\r'); // Shortcut for Enter Key
page.type():
此外,您可以使用page.type()
:
await page.type(String.fromCharCode(13));
page.keyboard.type():
同样,您可以使用page.keyboard.type()
:
await page.keyboard.type(String.fromCharCode(13));
page.keyboard.sendCharacter():
另一种替代方法是使用 page.keyboard.sendCharacter()
方法:
await page.keyboard.sendCharacter(String.fromCharCode(13));
page.keyboard.down() / page.keyboard.up():
您还可以使用 page.keyboard.down()
and page.keyboard.up()
:
// Enter Key
await page.keyboard.down('Enter');
await page.keyboard.up('Enter');
// Shortcut for Enter Key
await page.keyboard.down('NumpadEnter');
await page.keyboard.up('NumpadEnter');
// Shortcut for Enter Key
await page.keyboard.down('\n');
await page.keyboard.up('\n');
// Shortcut for Enter Key
await page.keyboard.down('\r');
await page.keyboard.up('\r');
简短回答首先附加到输入控件可能是个好主意:
await page.type('#inp_srch_box', 'add');
await page.type('#inp_srch_box',String.fromCharCode(13));
长答案...
cat package.json
{
"name": "test-open-login",
"version": "0.7.9",
"description": "an example test to test the login of the qto app",
"main": "test-open-login.test.js",
"scripts": {
"test": "mocha --recursive test",
"server": "http-server src"
},
"license": "BSD",
"devDependencies": {
"mocha": "5.0.1",
"puppeteer": "^2.1.0"
},
"dependencies": {
"chai": "^4.2.0",
"http-server": "^0.12.1",
"mocha": "5.0.1"
}
}
cat test/test-login.spec.js
const puppeteer = require('puppeteer');
async function main(){
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.setViewport({width: 1200, height: 720})
await page.goto('https://qto.fi/qto/login', { waitUntil: 'networkidle0' });
// wait until
await page.type('#email', 'test.anonymous.user@gmail.com');
//await page.type('#pass', 'secret');
// click and wait for navigation
await page.waitFor(1000);
//await frame.waitFor(1000);
await Promise.all([
page.click('#butLogin'),
page.waitForNavigation({ waitUntil: 'networkidle0' }),
]);
await page.type('#inp_srch_box', 'add');
await page.type('#inp_srch_box',String.fromCharCode(13));
}
main();
是page.keyboard.press()
参考:https://pptr.dev/#?product=Puppeteer&version=v3.0.0&show=api-keyboardpresskey-options
在 https://github.com/puppeteer/puppeteer/blob/master/src/USKeyboardLayout.js
处查找键名和键码await page.keyboard.press('Enter');
这对我有用