首次运行pyppeteer遇到报错的定位思路与处理方法,MaxRetryError: HTTPSConnectionPool(host='storage.googleapis.com', port=443)
问题描述
在Ubuntu 22.04操作系统上安装 pyppeteer 完成后,首次运行 pyppeteer 报错如下:
MaxRetryError: HTTPSConnectionPool(host='storage.googleapis.com', port=443): Max retries exceeded with url: /chromium-browser-snapshots/Linux_x64/588429/chrome-linux.zip (Caused by ProtocolError('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')))
提醒: 首次运行pyppeteer时,会自动下载最新版本的Chromium浏览器。
阅读报错信息,可知pyppeteer在下载浏览器时失败报错了。根据报错信息,可拼接出访问地址:https://storage.googleapis.com:443/chromium-browser-snapshots/Linux_x64/588429/chrome-linux.zip
报错截图


问题产生条件
- 笔者使用的Ubuntu 22.04系统,在虚拟化软件 VirtualBox 上运行。
- 笔者使用的网络是 IPv6 网络。
- 首次运行 pyppeteer。(安装命令:pip install pyppeteer)
定位思路
问题1、该地址早已失效?——非也,该地址在Ubuntu上无法访问,在Win11上正常访问。
在Ubuntu上访问 https://storage.googleapis.com/ 提示无法正常访问此页面,但可以正常访问百度,如图:

在Win11上访问 https://storage.googleapis.com/ 可正常打开页面,排除该地址已经失效的可能。

问题2、为何偏偏ubuntu无法访问该地址,能否跳过域名,用IP地址访问?——然也,在ubuntu上可使用IP:Port的形式访问页面。
我们知道,打开域名网址时,电脑将域名层层解析,解析成IP地址,并访问该IP,最终把服务响应内容呈现在浏览器上。
所以,访问不了的网址 https://storage.googleapis.com:443/chromium-browser-snapshots/Linux_x64/588429/chrome-linux.zip 可以根据名 storage.googleapis.com 找到一串IP地址,转换成 https://IP地址:端口/网址后缀
在Windows上使用谷歌浏览器,拉起F12开发者工具,切换到Network网络页签,重新访问该地址,可知解析后的IP和端口号。

复制这串IP和端口,编写成 https://IP地址:端口/网址后缀 的形式,并且在Ubuntu上打开,页面访问成功。

问题3、为何偏偏IP形式的网址能打开,域名形式的网址不能打开?——VirtualBox上缺少IPv6的域名解析服务
我们知道,想要把域名解析出IP地址,需要依赖DNS,也就是域名解析服务器。
在这个问题里,Ubuntu 需要搞明白storage.googleapis.com对应的IP是什么,但是没有懂哥DNS来告诉它,所以我们看到了这个域名访问不通的报错。
在Ubuntu上ping不通这个域名:

在Win11上ping的通这个域名:

解决方法
怎么办呢?既然Win11可以访问这个网址,只要把Win11的DNS加到Ubuntu就可以了。
在Win11上打开命令行窗口,查询使用的DNS服务 ipconfig

在Ubuntu 22.04上配置此域名服务器(新增一行nameserver) sudo vi /etc/resolv.conf,
按 i 编辑
按 Esc 退出编辑
输入 wq! 并回车,保存退出

再次运行 pyppeteer ,问题解决。


浙公网安备 33010602011771号