Nodejs中puppeteer控制chromium经常卡死是什么原因
Nodejs中puppeteer控制chromium经常卡死是什么原因
https://gist.github.com/silvernoo/b998086fd2b933d2dcf70bee7460559a
十几次循环后必然会卡死,没有任何日志。es 代码不太会写,自己找原因希望渺茫,dalao 帮我看看是怎么回事。
我当时使用 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时,遇到经常卡死的情况,可能由多种因素导致。以下是一些可能的原因及其解决方案:
-
版本不兼容:
- 确保Puppeteer版本与Chromium版本兼容。Puppeteer通常会自动下载并使用与其兼容的Chromium版本。如果出现问题,可以尝试更新Puppeteer到最新版本,或者手动指定一个兼容的Chromium版本。
-
资源不足:
- Chromium运行需要足够的内存和CPU资源。如果系统资源不足,可能导致Chromium卡死。可以尝试增加系统资源,或者关闭其他占用资源较高的程序。
-
代码问题:
- 确保Puppeteer的使用方式正确。例如,使用
async/await来确保异步操作完成。以下是一个简单的代码示例:
- 确保Puppeteer的使用方式正确。例如,使用
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// 其他操作...
await browser.close();
})();
-
调试与日志:
- 开启Puppeteer的调试模式,查看详细的错误日志,以便定位问题。
-
网络问题:
- 确保网络连接稳定,因为Puppeteer在控制Chromium时可能需要访问网络资源。
综上所述,解决Node.js中Puppeteer控制Chromium卡死的问题需要从多个方面入手,包括版本兼容性、系统资源、代码正确性、调试与日志以及网络连接等。

