打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Puppeteer 系列踩坑日志
在使用puppeteer的时候,本机运行简直是和谐的不得了。但是一旦放到了服务器上长期运行,则要遭受众多的问题。我曾一度怀疑是不是服务器趁我看不见,故意给我搞事情。不过,计算机的世界里,任何的问题,肯定错在我身上。我们来谈谈puppeteer的一些崩溃措施。

页面崩溃

  • 本来想截个图给大家看看,但是奈何笔者写这篇文章的时候,它就不出错了....
  • 总之描述给大家就是:页面挂掉了,想必大家都见到过(不要杠没见过,那说明工作还不够多)。
  • 这种情况我们的应对方案其实官方已经给出了解释 https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#event-error

    event: 'error'

    • )

    Emitted when the page crashes.

    NOTE error event has a special meaning in Node, see error events for details.

  • 于是我们代码:

    page.on('error', err => {
    console.log('Chrome浏览器页面崩溃:', err);
    });

我们可以使用 page 订阅 error 事件,这样的话,我们可以在回调里面去操作我们页面错误后的处理方法。

浏览器崩溃

但有时候往往太年轻,我当时以为这样就是万全之策,没想到,接下来第二天还是服务器报错了。找来找去,看到了一个这样的错误:"WebSocket is not open: readyState 3" 这个报错看得我一脸懵逼。

在翻阅了官方文档之后,毫无进展,好在一位好心的老哥,替我在官方文档(github上的地址)找到了一个issues: https://github.com/puppeteer/puppeteer/issues/4428

情况跟我几乎一模一样。看看交流下来是如何解决的?

上代码:

const setup = async () => {
browser = await puppeteer.launch({
args: ['--disable-gpu', '--no-sandbox', '--disable-dev-shm-usage']
});

browser.on('disconnected', setup);

logger.info(`Started Puppeteer with pid ${browser.process().pid}`);
};

反过来去查阅官方文档: https://github.com/puppeteer/puppeteer/blob/master/docs/api.md#event-disconnected

原来如此,看来我文档看的还是不够仔细,当我们程序和浏览器断开了链接。那么这个方法就会被执行,言下之意也就是我们的程序崩掉了。

综上,一般情况下,我都会加上这两个的报错。毕竟chrome在长期跑得过程中,难免会有很多不确定性因素。但是我们不将这些不确定因素都囊括住,那么也就增加了程序崩掉的风险,健壮性由此体现。

  • 如有遇到其他问题,评论下方可以联系我,共同学习排坑。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
爬虫神器 Pyppeteer 介绍及爬取某商城实战
使用Puppeteer撸一个爬虫
超越selenium的爬虫神器Pyppeteer
Puppeteer 入门与实战
puppeteer学习(二)
phantomJs之殇,chrome
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服