pyppeteer使用时常见的bug及解决办法

背景

最近时不时的会用到pyppeteer,一会儿是本地环境利用pyppeteer写个模拟浏览器的小脚本,一会儿是线上阿里云服务器上需要部署pyppeteer所写的脚本。中途遇到一些问题,最后都是通过goolge解决了。为了以后不再到处google,故写下此博客。

问题一

pyppeteer.errors.NetworkError: Protocol error Network.getCookies: Target close 或者
pyppeteer.errors.NetworkError: Protocol Error (Runtime.evaluate): Session closed. Most likely the page has been closed.
后来有人说可以把python第三方库websockets版本7.0改为6.0(反正在7.0版本以下就)就可以了,亲测可用。

pip3.6 uninstall websockets #卸载websockets
pip3.6 install websockets==6.0 #指定安装6.0版本```

问题二

chromium浏览器多开页面卡死问题
在浏览器初始化的时候launch里添加 ‘dumpio’:True。跟浏览器进程有关,至于为什么要这样我也不太清楚。

问题三

浏览器窗口很大,但是内容很小
上面的问题是需要设置浏览器显示大小,默认就是无法正常显示。

pyppeteer使用时常见的bug及解决办法_第1张图片
可以看到gmail页面只在左侧显示,右侧都是空白,网站内容并没有完整铺满chromium,底部横向滚动条拖拽还很不方便。

browser = await launch({'headless': False,'dumpio':True, 'autoClose':False,'args': ['--no-sandbox', '--window-size=1366,850']})
await page.setViewport({'width':1366,'height':768})

通过上面设置Windows-size和Viewport大小来实现网页完整显示。
但是对于那种向下无限加载的长网页这种情况如果浏览器是可见状态会显示不全,针对这种情况的解决方法就是复制当前网页新开一个标签页粘贴进去就正常了。

问题四

运行时,屏幕终端有很多不相关的日志打印
下面是帖子https://segmentfault.com/a/1190000018873537 解决办法
将pyppeteer类和websockets.protlcol类的log设置为WARNING级别,可以避免WARINIG级别下的log输出。此法,可以节省程序打印无用日志的时间和日志占用的巨大空间。

import logging
pyppeteer_level = logging.WARNING
logging.getLogger('pyppeteer').setLevel(pyppeteer_level)
logging.getLogger('websockets.protocol').setLevel(pyppeteer_level)
pyppeteer_logger = logging.getLogger('pyppeteer')
pyppeteer_logger.setLevel(logging.WARNING)

问题五

程序首次运行时,会自动下载chromium,但是下载报错,提示ssl错误

[W:pyppeteer.chromium_downloader] start chromium download. Download may take a few minutes. HTTPSConnectionPool(host=‘storage.googleapis.com’, port=443): Max retries exceeded with url: /chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip (Caused by SSLError(SSLError(1, ‘[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)’),))
解决办法:打开 /some/path/python3.6/lib/site-packages/pyppeteer/chromium_downloader.py,替换里面DEFAULT_DOWNLOAD_HOST = 'https://storage.googleapis.com’为DEFAULT_DOWNLOAD_HOST = 'http://storage.googleapis.com’即可,具体路径替换成自己的python路径。

问题六

pyppeteer.errors.NetworkError: Protocol error Runtime.evaluate: Target close
打开新标签页遇到的,解决办法根据https://github.com/miyakogi/pyppeteer/pull/160/files 这个文件进行更改pyppeteer包里面的connection.py文件即可。
pyppeteer使用时常见的bug及解决办法_第2张图片

问题七

在 centos系统中,首次运行pyppeteer会自动下载chromium,但是下载运行的过程中会报错:
/some/path/root/node_modules/puppeteer/.local-chromium/linux-543305/chrome-linux/chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory

sudo yum install google-chrome-stable
如果提示没有这个包,那就需要添加google的源来下载,如果没法访问google,那就需要找个镜像了,把下面的url替换成镜像的即可,添加文件/etc/yum.repo.d/google-chrome.repo:

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/ch...$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/lin...
如果无法下载gpgkey,可以把gpgcheck的值改为0(如果你不介意安全问题),再运行一次yum的安装命令即可。

然后,chromium就可以正常下载了。

参考 一:https://www.sanfenzui.com/pyppeteer-bug-collection.html
参考二:https://segmentfault.com/a/1190000018873537

你可能感兴趣的:(python爬虫)