【问题标题】:Puppeteer behaving differently headless木偶表演者无头行为不同
【发布时间】:2020-11-20 16:31:59
【问题描述】:

我有以下脚本

const puppeteer = require('puppeteer');

async function startBrowser() {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();
    return {browser, page};
}

async function closeWindows(page) {
    await page.waitForSelector(selector1);
    await page.click(selector1);
    await page.waitForSelector(selector1);
    await page.click(selector2);
}
async function doStuff(URL) {
    const {browser, page} = await startBrowser();
    await page.goto(URL);
    await closeWindows(page);
}

doStuff(URL)

其中定义了selector1selector2URL

这很好用,但是当我尝试在无头模式下运行它时,我会收到以下错误消息: TypeError: Cannot read property 'waitForSelector' of undefined。我已经尝试过使用

await page.waitForNavigation({ waitUntil: 'networkidle0' })

但这只是让我一直等到收到 TimeoutError。如果这有帮助:该 URL 是一个 youtube 视频。

【问题讨论】:

  • @Chris 在他的回答中指出,页面没有完全加载。您应该在代码中添加waitUntil,并专门等待domcontentloadedload 可能还不够,networkidel2 可能需要您等待太久。
  • @AbrarHossain 这不起作用。同样,只有无头模式会出现此问题。
  • 您是否尝试访问视频播放器?因为这甚至可能无法在无头模式下加载
  • 是的,我是,不过是手机模式下自动打开的问题。

标签: javascript node.js puppeteer


【解决方案1】:

我通过添加以下行解决了这个问题:

await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');

显然,该网站正在以移动模式打开。

【讨论】:

  • 很高兴您的问题得到了解决,但这并不能解释为什么它会在移动模式下加载。 puppeteer 不会发生这种情况,除非您添加其他代码来更改默认用户代理
  • 我没有以任何方式更改默认用户代理。此外,我不是唯一遇到此问题的人,请查看官方 Puppeteer GitHub 存储库中的 issue #1766 以获取更多信息。
  • 我不知道这一点。感谢参考
【解决方案2】:

嗯,这似乎很奇怪,即使有时我自己也注意到这两种模式之间存在一些差异。例如,使用 React 应用 puppeteer 的客户网站崩溃或类似情况。
我不会使用waitForNavigation,而是使用goto 为您提供的选项(see docs here)。
所以应该是这样的:

 await page.goto('https://news.ycombinator.com', { 
     waitUntil: ['load', 'networkidle2'],
     timeout: 10000,
 });

此方法还返回一个 HTTPResponse 对象,您可以在其中检查状态代码和正文作为文本。
也可以看看这里的debugging tips,例如拦截console消息,并从DEBUG模块输出puppeteer的消息。

【讨论】:

  • 按照您的建议设置我的page.goto 并没有立即改善,但我一定会利用调试技巧,谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
相关资源
最近更新 更多