headless false - 始终关注地址栏

Tal*_*lom 5 node.js puppeteer

我正在使用带有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();
})();
Run Code Online (Sandbox Code Playgroud)

我希望在页面加载后,用户将能够在输入字段内输入,而不必先“移动”到该字段中(通过鼠标或选项卡)。

Tho*_*orf 7

您遇到的问题是您将光标设置在页面内,但浏览器本身的焦点仍然在地址栏上。

要使浏览器聚焦页面本身,您需要调用page.bringToFront()which 将浏览器的焦点设置为选项卡。您应该在像这样创建页面后立即执行此操作:

const page = await browser.newPage();
await page.bringToFront();
Run Code Online (Sandbox Code Playgroud)

此外,正如其他答案中已经指出的那样,您为该page.waitForSelector函数提供了无效选项。puppeteer 只是忽略了这一点(与您的问题无关),但应该将其删除。