无头模式下 Puppeteer 卡住了

6

我的 Puppeteer 脚本正在无头模式下运行,但出现了超时问题。

我不确定具体是什么问题。在本地运行脚本没有问题,但在无头模式下总是超时。

我在网上读到说可能是脚本加载外部 JavaScript 文件失败导致的?有其他人遇到过这个问题并能提供帮助吗?

这是我 Puppeteer 实例设置函数的内容:

 setUpPuppeteer: async () => {
    const headless = process.env.NODE_ENV === "production";
    const browser = await pupeteer.launch({
      headless,
      devtools: true,
      args: ['--no-sandbox' ]
    });
    const context = await browser.createIncognitoBrowserContext();
    const page = await context.newPage(); // Create new instance of puppet

    page.on('error', err => {
      logger.error('Puppeteer error.', err);
    });

    page.setDefaultNavigationTimeout(10000);

    if (process.env.NODE_ENV === 'production') {
      await page.setRequestInterception(true); // Optimize (no stylesheets, images)...
      page.on('request', request => {
        if (['image', 'stylesheet'].includes(request.resourceType())) {
          request.abort();
        } else {
          request.continue();
        }
      });
    }

    return {browser: context, page};
  },

如果devtools为真,则headless选项将被设置为假。将devtools设置为false,然后再试一次。 - mbit
1个回答

4
setUpPuppeteer: async () => {
    const headless = process.env.NODE_ENV === "production";
    const browser = await pupeteer.launch({
      headless: true,
      devtools: true,
      args: [
        '--ignore-certificate-errors',
        '--no-sandbox',
        '--disable-setuid-sandbox',
        '--disable-accelerated-2d-canvas',
        '--disable-gpu'
            ]
    });
    const context = await browser.createIncognitoBrowserContext();
    const page = await context.newPage(); // Create new instance of puppet

    page.on('error', err => {
      logger.error('Puppeteer error.', err);
    });

    page.setDefaultNavigationTimeout(10000);

    if (process.env.NODE_ENV === 'production') {
      await page.setRequestInterception(true); // Optimize (no stylesheets, images)...
      page.on('request', request => {
        if (['image', 'stylesheet'].includes(request.resourceType())) {
          request.abort();
        } else {
          request.continue();
        }
      });
    }

    return {browser: context, page};
  },

17
仅提供代码的答案被认为是低质量的:请确保提供解释,说明您的代码做什么以及如何解决问题。如果您在文章中添加更多信息,将有助于提问者和未来的读者。请参阅解释完全基于代码的答案。请记住不要改变原来的意思。 - Calos
1
谢谢。你的参数真的帮了我很大的忙。我有一个脚本,在Windows10和OSX上完美运行,但在Linux上就无法工作。我一直想不通原因,它总是会卡住,而其他情况下都可以顺利运行。但是,在我添加了你的参数后,它终于可以正常工作了!所以,非常感谢你! - AndiAna
2
devtools: true自动将headless设置为false。这绝对不是原帖或访问此页面的人想要看到的内容。 - George Zvonov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接