NodeJS 防止puppeteer后藤()在屏幕截图超时时失败

4bbkushb  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(160)

我正在使用puppeteer核心版本19.6.3通过AWS Lambda来截图网页。下面是我的代码:

// Create a browser instance
  const browser = await puppeteer.launch({
    args: chromium.args,
    defaultViewport: chromium.defaultViewport,
    executablePath: await chromium.executablePath("./"),
    headless: chromium.headless,
    ignoreHTTPSErrors: true,
  });

  // Create a new page
  const page = await browser.newPage();

  // Set viewport width and height
  await page.setViewport({ width: pageWidth, height: pageHeight, deviceScaleFactor: scaleFactor });
  // Open URL in current page
  await page.goto(websiteURL);

  // Capture screenshot
  const screenshot = await page.screenshot();

这在大多数情况下都有效,但有时当我想截图的页面很重并且有很多iframe时,它会失败。在这些情况下,它会因Navigation timeout of 30000 ms exceeded而失败。我不想完全摆脱超时,因为我不想让这个函数花费很长时间或者永远不会结束。
有没有什么方法可以调用page.goto()并让它等待页面加载,但如果页面在30秒后(或其他定义的超时)没有加载,那么它就继续对未完全加载的页面进行截图?我不在乎结果截图看起来不好或不完整,我仍然希望它发生,无论如何。

ncecgwcz

ncecgwcz1#

我在page.goto()中添加了一个try/catch,这样即使在等待加载时超时,我也可以继续截图。

// Open URL in current page
  try {
    await page.goto(websiteURL);
  } catch (error) {
    console.error("Error going to page, but continuing with screenshot: ", error);
  }

  // Capture screenshot
  const screenshot = await page.screenshot();

相关问题