首次运行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

报错截图

image

image

问题产生条件

  1. 笔者使用的Ubuntu 22.04系统,在虚拟化软件 VirtualBox 上运行。
  2. 笔者使用的网络是 IPv6 网络。
  3. 首次运行 pyppeteer。(安装命令:pip install pyppeteer)

定位思路

问题1、该地址早已失效?——非也,该地址在Ubuntu上无法访问,在Win11上正常访问。

在Ubuntu上访问 https://storage.googleapis.com/ 提示无法正常访问此页面,但可以正常访问百度,如图:

image

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

image

问题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和端口号。

image

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

image

问题3、为何偏偏IP形式的网址能打开,域名形式的网址不能打开?——VirtualBox上缺少IPv6的域名解析服务

我们知道,想要把域名解析出IP地址,需要依赖DNS,也就是域名解析服务器。

在这个问题里,Ubuntu 需要搞明白storage.googleapis.com对应的IP是什么,但是没有懂哥DNS来告诉它,所以我们看到了这个域名访问不通的报错。

在Ubuntu上ping不通这个域名:
image

在Win11上ping的通这个域名:
image

解决方法

怎么办呢?既然Win11可以访问这个网址,只要把Win11的DNS加到Ubuntu就可以了。

在Win11上打开命令行窗口,查询使用的DNS服务 ipconfig
image

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

再次运行 pyppeteer ,问题解决。
image

posted @ 2023-09-21 03:10  wem2017  阅读(154)  评论(0)    收藏  举报