javascript - Puppeteer 在 headless 模式下挂起

标签 javascript timeout puppeteer google-chrome-headless

我的 Puppeteer 脚本在 headless 模式下运行并且超时。

我不确定到底出了什么问题。该脚本在本地运行良好,但是当我在 headless 模式下运行时,它总是超时。

我在网上读到可能是由于脚本无法加载外部 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};
  },

最佳答案

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};
  },

关于javascript - Puppeteer 在 headless 模式下挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59912590/

相关文章:

http - 如何使用 RavenDB 中的 key 诊断和防止 get 时的 http 超时

node.js - Node@6是否支持puppeteer api生成PDF

javascript - 如何使用 puppeteer 通过占位符选择元素

javascript - React 和 Webpack 模块解析失败 :/testimonials. js 意外 token (6:4)

php - 读取大TXT到MYSQL超时

javascript - 有没有办法在超时时删除javascript中的所有函数?

javascript - 带有 Puppeteer 的 waitForSelector 仅在 headless 模式下不响应

javascript - 导航栏上的链接有 100% 的高度作为标志

javascript - 使用 lodash 函数映射柯里化(Currying)过滤器

javascript - 我正在尝试使用 multer 接收视频文件并将其保存在服务器上