Puppeteer 在无头模式下挂起

Har*_*mer 4 javascript timeout google-chrome-headless puppeteer

我的 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};
  },
Run Code Online (Sandbox Code Playgroud)

小智 5

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};
  },
Run Code Online (Sandbox Code Playgroud)

  • 仅代码答案被认为是低质量的:请确保提供解释您的代码的作用以及它如何解决问题。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者有所帮助。请参阅[解释完全基于代码的答案](https://meta.stackexchange.com/questions/114762/) (6认同)
  • `devtools: true` 自动将 `headless` 设置为 `false`。这当然不是 OP 或最终进入此页面的人想要看到的。 (2认同)