木偶操作按钮按下
Puppeteer Button Press
根据https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagepresskey-options,您可以使用 Puppeteer 模拟按下键盘按钮。
这是我的做法:
// First, click the search button
await page.click('#outer-container > nav > span.right > span.search-notification-wrapper > span > form > input[type="text"]');
// Focus on the input field
await page.focus('#outer-container > nav > span.right > span.search-notification-wrapper > span > form > input[type="text"]');
// Enter some text into the input field
await page.type("Bla Bla");
// Press Enter to search -> this doesn't work!
await page.press("Enter");
按下按钮不会产生任何结果。基本无视
如何模拟回车键提交表单?
我终于想通了。我在同一个表单中发现了一个类型为提交的锚元素。然后我点击它并提交了表格。
这是我使用的代码:
const form = await page.$('a#topbar-search');
await form.evaluate( form => form.click() );
您也可以使用 $eval 方法代替求值:
await page.$eval( 'a#topbar-search', form => form.click() );
也许另一种选择是:
await page.keyboard.press('Enter');
利用其虚拟键盘API。更多信息 here
您可以使用 xpath 创建自己的元素。
const browser = await puppeteer.launch();
const page = await browser.newPage();
const txtObject = await page.$x('.//input[type="text"]');
await txtObject[0].type('bla bla bla');
在上面的代码中,我们使用“$x”来检索一个数组中的所有元素,这就是我们在下一行代码中使用“0”作为索引的原因。如果您有多个对象,您可以使用 "IF" 条件和一个循环来搜索正确的 space 并使用正确的对象。其他方式如果你有一些属性,你也可以使用类似的东西来有一个干净简单的方法来识别你的对象
await page.click('input[type="submit"]'); // With type
await page.click('input[class="ng-newstyle"]'); //With class attribute
并且您可以在不久的将来降低维护的复杂性。
await page.$eval('input[name=btnK]', el => el.click());
这将单击 google 中的提交按钮。至于你的页面,找出元素或按钮id,然后使用它。
在撰写本文时,page.press()
不是有效的 Puppeteer 方法。使用 page.press()
会导致以下错误:
Error running your code. TypeError: page.press is not a function
您可能指的是 page.keyboard.press()
。
有关如何在 Puppeteer 中模拟 Enter 键的完整列表,请参见下文:
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');
您可以使用以下代码 click
对按钮进行操作。
const searchButtonNodeSelector = ".submit-button";
await page.click(searchButtonNodeSelector);
这API解释here。
根据https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagepresskey-options,您可以使用 Puppeteer 模拟按下键盘按钮。
这是我的做法:
// First, click the search button
await page.click('#outer-container > nav > span.right > span.search-notification-wrapper > span > form > input[type="text"]');
// Focus on the input field
await page.focus('#outer-container > nav > span.right > span.search-notification-wrapper > span > form > input[type="text"]');
// Enter some text into the input field
await page.type("Bla Bla");
// Press Enter to search -> this doesn't work!
await page.press("Enter");
按下按钮不会产生任何结果。基本无视
如何模拟回车键提交表单?
我终于想通了。我在同一个表单中发现了一个类型为提交的锚元素。然后我点击它并提交了表格。
这是我使用的代码:
const form = await page.$('a#topbar-search');
await form.evaluate( form => form.click() );
您也可以使用 $eval 方法代替求值:
await page.$eval( 'a#topbar-search', form => form.click() );
也许另一种选择是:
await page.keyboard.press('Enter');
利用其虚拟键盘API。更多信息 here
您可以使用 xpath 创建自己的元素。
const browser = await puppeteer.launch();
const page = await browser.newPage();
const txtObject = await page.$x('.//input[type="text"]');
await txtObject[0].type('bla bla bla');
在上面的代码中,我们使用“$x”来检索一个数组中的所有元素,这就是我们在下一行代码中使用“0”作为索引的原因。如果您有多个对象,您可以使用 "IF" 条件和一个循环来搜索正确的 space 并使用正确的对象。其他方式如果你有一些属性,你也可以使用类似的东西来有一个干净简单的方法来识别你的对象
await page.click('input[type="submit"]'); // With type
await page.click('input[class="ng-newstyle"]'); //With class attribute
并且您可以在不久的将来降低维护的复杂性。
await page.$eval('input[name=btnK]', el => el.click());
这将单击 google 中的提交按钮。至于你的页面,找出元素或按钮id,然后使用它。
在撰写本文时,page.press()
不是有效的 Puppeteer 方法。使用 page.press()
会导致以下错误:
Error running your code. TypeError: page.press is not a function
您可能指的是 page.keyboard.press()
。
有关如何在 Puppeteer 中模拟 Enter 键的完整列表,请参见下文:
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');
您可以使用以下代码 click
对按钮进行操作。
const searchButtonNodeSelector = ".submit-button";
await page.click(searchButtonNodeSelector);
这API解释here。