当前位置: 首页 > 后端技术 > Node.js

Puppeteer系列陷阱日志—5—运行崩溃

时间:2023-04-03 22:44:31 Node.js

使用puppeteer时,机器运行和谐。但是一旦放到服务器上运行时间长了,就会出现很多问题。我曾经怀疑是不是服务器故意在我看不到的时候搞砸了我。然而,在计算机世界里,任何问题都必须是我的错。下面说一下puppeteer的一些崩溃措施。页面崩溃了,想截图给大家看看,但是作者写这篇文章的时候并没有出错……总之给大家的描述是:页面挂了,大家肯定看到了(don't如果您还没有看到该栏,则说明工作还不够)。在这种情况下,我们的响应计划已经得到官方解释https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#event-error。事件:'error'[Error](https://nodejs.org/api/errors.html#errors_class_error))页面崩溃时发出。NOTEerror事件在Node中有特殊含义,详见error事件。所以我们代码:page.on('error',err=>{console.log('Chrome浏览器页面崩溃:',err);});我们可以使用页面来订阅错误事件,这样我们就可以在回调中去操作我们的页面错误后的处理方法。浏览器崩溃,但有时它太年轻了。本以为万无一失的解决办法,没想到第二天服务器就报错了。环顾四周,我看到了这样一个错误:“WebSocketisnotopen:readyState3”这个错误让我一头雾水。看了官方文档,没有任何进展。还好有好心的大哥在官方文档(github上的地址)给我找了一个issue:https://github.com/puppeteer/puppeteer/issues/4428的情况和我的几乎一模一样。看看交换后是怎么解决的?上面的代码:constsetup=async()=>{browser=awaitpuppeteer.launch({args:['--disable-gpu','--no-sandbox','--disable-dev-shm-usage']});browser.on('断开连接',setup);logger.info(`使用pid${browser.process().pid}`启动Puppeteer);};依次查看官方文档:https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#event-disconnected所以,看来我的文档不够仔细,当我们的程序和浏览器断开连接。那么这个方法就会被执行,也就是说我们的程序崩溃了。综上所述,一般情况下,我会加上这两个错误。毕竟在chrome长期的运行过程中,难免会有很多不确定的因素。但是如果我们不把这些不确定因素都包括进去,那么程序崩溃的风险就会增加,健壮性就体现在这上面。如果遇到其他问题,可以在评论底部联系我,我们一起学习如何解决这个坑。