我正在使用带有headless=false
选项的puppeteer,以便让用户在表单中键入一些详细信息,然后以编程方式读取结果。
我希望光标/焦点将在页面加载时位于第一个输入字段上,但焦点始终位于地址栏上。
有没有办法在页面内移动光标/焦点?
我已经尝试过await page.focus(selector)
。
请找到以下示例:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({ headless: false});
const page = await browser.newPage();
let selector = ".w3-white.w3-padding.notranslate>form>input[name='firstname']";
await page.goto('https://www.w3schools.com/html/html_forms.asp');
await page.waitForSelector(selector,{waitUntil :"networkidle2"});
await page.focus(selector);
await page.type(selector,"aaa");
//await browser.close();
})();
我希望页面加载后,用户可以在输入字段内键入内容,而不必先“移动”到该字段中(通过鼠标或标签)。
答案 0 :(得分:1)
您遇到的问题是您在页面内设置了光标,但是浏览器本身的焦点仍然在地址栏上。
要使浏览器聚焦页面本身,您需要调用page.bringToFront()
,它将把浏览器的焦点设置到选项卡上。您应该在创建这样的页面后立即执行以下操作:
const page = await browser.newPage();
await page.bringToFront();
此外,正如在其他答案中已经指出的那样,您正在为page.waitForSelector
函数提供无效的选项。伪造者只是忽略了这一点(与您的问题无关),但应将其删除。
答案 1 :(得分:0)
有一件事需要纠正,waitUntil
是page.goto
的一个选项:
await page.goto('https://www.w3schools.com/html/html_forms.asp',{waitUntil :"networkidle2"});
有了这个,您的示例就可以在puppeteer 1.11和node 8.6上正常工作
答案 2 :(得分:0)
我调用 mouse.click() 函数将光标从地址栏移动到页面。
await page.mouse.click(0, 0);
使用 browser.newPage() 的方式如我所料,但这种情况使用更多内存。所以我使用 click() 函数。