【问题标题】:Puppeteer times out when headless is true on waitForNavigation and waitForSelector当 waitForNavigation 和 waitForSelector 上的 headless 为真时,Puppeteer 超时
【发布时间】:2020-04-14 16:21:52
【问题描述】:

我成功地浏览了一个网站,登录并获得了我需要的信息。但是,当我切换到使用 headless 为 true 的相同代码时,它会在我尝试等待的每一行上超时。

const self = {
  browser: null,
  page: null,

  initialize: async () => {
    self.browser = await puppeteer.launch({
      headless: true,
    });

    self.page = await self.browser.newPage();

    /* Go to homepage */
    await self.page.goto(SHIPT_URL, { waitUntil: "networkidle0" });
  },

getResults: async () => {
    await self.page.type("#email", email, { delay: 100 });
    await self.page.type("#password", password, { delay: 100 });
    let loginButton = await self.page.$("button.sc-fzplWN");
    if (loginButton) {
      await loginButton.click();
      await self.page.waitForNavigation({ waitUntil: "networkidle0" }); // Hangs here

      await self.page.waitForSelector("a.pointer.link.gray900"); // Hangs here if I remove above waitForNavigation

我已经尝试对此进行研究并尝试了几种不同的方法,例如设置我的用户代理,将 .click 和 waitForNavigation 放入 promise.all,在 waitForNavigation 中删除“waitUntil”,并在 .click 上删除 await,但似乎没有正在工作。

编辑。所以看起来登录不起作用,它说错误的用户名或电子邮件,这是没有意义的,因为当我不在无头时它可以工作。这需要进一步研究

【问题讨论】:

    标签: node.js web-scraping puppeteer


    【解决方案1】:

    在运行命令之前尝试截取输出。可能是页面默认大小不同,选择器不存在。

    Puppeteer 将初始页面大小设置为 800×600px,它定义了屏幕截图的大小。

    getResults: async () => {
    await page.screenshot({path: 'example.png'});
    await self.page.type("#email", email, { delay: 100 });
    await self.page.type("#password", password, { delay: 100 });
    let loginButton = await self.page.$("button.sc-fzplWN");
    

    【讨论】:

    • 嗯,所以你的尺寸是对的。屏幕截图中仅显示电子邮件表单。所以选择器只有在元素在屏幕截图中可见时才能存在?由于我是 puppeteer 的新手,因此我会对此进行一些研究。感谢您的帮助
    • 避免问题的最简单方法是尝试将 puppeteer 中的屏幕尺寸设置为您正在使用的尺寸。 https://github.com/puppeteer/puppeteer/blob/v2.1.1/docs/api.md#pagesetviewportviewport
    • 这个答案可能让我好几天不知道发生了什么。谢谢。您可以在启动时设置视口:const browser = await puppeteer.launch({ headless: true, defaultViewport: { width: 1200, height: 900 } })
    猜你喜欢
    • 1970-01-01
    • 2020-10-19
    • 2019-09-29
    • 2023-02-07
    • 2021-01-04
    • 2018-10-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多