Nodejs中puppeteer控制chromium经常卡死是什么原因

Nodejs中puppeteer控制chromium经常卡死是什么原因

https://gist.github.com/silvernoo/b998086fd2b933d2dcf70bee7460559a

十几次循环后必然会卡死,没有任何日志。es 代码不太会写,自己找原因希望渺茫,dalao 帮我看看是怎么回事。


2 回复

我当时使用 puppeteer 碰到如下几种问题会造成 hang 的。

1. 截图 hang
界面上没有 body 元素。你可以 goto 界面后,再把 body 元素取出来看一看。

2. 因为 page crash 而 hang
程序一旦意外 crash 后,后面执行 page 相关的代码就会被 hang 住,现在的解决办法就是在 page.on(‘error’) 里面把 browser.close 掉,使后面的代码报错,从而被 catch 住,在 catch 里面再做进一步处理。

3. puppeteer 在跑并行的时候,如果使用 Promise.all ,很容易被其中一个异步方法 hang 住,造成整个进程都 hang 住
解决方法就是创建并行函数,但不要使用 Promise.all


在Node.js中使用Puppeteer控制Chromium时,遇到经常卡死的情况,可能由多种因素导致。以下是一些可能的原因及其解决方案:

  1. 版本不兼容

    • 确保Puppeteer版本与Chromium版本兼容。Puppeteer通常会自动下载并使用与其兼容的Chromium版本。如果出现问题,可以尝试更新Puppeteer到最新版本,或者手动指定一个兼容的Chromium版本。
  2. 资源不足

    • Chromium运行需要足够的内存和CPU资源。如果系统资源不足,可能导致Chromium卡死。可以尝试增加系统资源,或者关闭其他占用资源较高的程序。
  3. 代码问题

    • 确保Puppeteer的使用方式正确。例如,使用async/await来确保异步操作完成。以下是一个简单的代码示例:
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  // 其他操作...
  await browser.close();
})();
  1. 调试与日志

    • 开启Puppeteer的调试模式,查看详细的错误日志,以便定位问题。
  2. 网络问题

    • 确保网络连接稳定,因为Puppeteer在控制Chromium时可能需要访问网络资源。

综上所述,解决Node.js中Puppeteer控制Chromium卡死的问题需要从多个方面入手,包括版本兼容性、系统资源、代码正确性、调试与日志以及网络连接等。

回到顶部