无头假-始终关注地址栏

时间:2019-04-24 08:09:44

标签: 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();
})();

我希望页面加载后,用户可以在输入字段内键入内容,而不必先“移动”到该字段中(通过鼠标或标签)。

3 个答案:

答案 0 :(得分:1)

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

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

const page = await browser.newPage();
await page.bringToFront();

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

答案 1 :(得分:0)

有一件事需要纠正,waitUntilpage.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() 函数。