本文记录因网络连接问题导致的一例webdiver-manager报错,以及解决方法。

一、问题场景

  为了避免每次为不同版本的Chrome浏览器适配ChromeDriver产生的不便,阿猪习惯使用python的webdriver-manager模块自动管理ChromeDriver,代码一直都运行正常。但是最近开始产生报错,报错信息摘录如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Traceback (most recent call last):
File "/home/zhu/zhu-env/lib/python3.10/site-packages/webdriver_manager/core/http.py", line 32, in get
resp = requests.get(
File "/home/zhu/zhu-env/lib/python3.10/site-packages/requests/api.py", line 73, in get
return request("get", url, params=params, **kwargs)
File "/home/zhu/zhu-env/lib/python3.10/site-packages/requests/api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
File "/home/zhu/zhu-env/lib/python3.10/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
File "/home/zhu/zhu-env/lib/python3.10/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
File "/home/zhu/zhu-env/lib/python3.10/site-packages/requests/adapters.py", line 501, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/zhu/Documents/liepin/main.py", line 481, in <module>
str_driver_path = ChromeDriverManager().install()
File "/home/zhu/zhu-env/lib/python3.10/site-packages/webdriver_manager/chrome.py", line 40, in install
driver_path = self._get_driver_binary_path(self.driver)
File "/home/zhu/zhu-env/lib/python3.10/site-packages/webdriver_manager/core/manager.py", line 40, in _get_driver_binary_path
file = self._download_manager.download_file(driver.get_driver_download_url(os_type))
File "/home/zhu/zhu-env/lib/python3.10/site-packages/webdriver_manager/core/download_manager.py", line 29, in download_file
response = self._http_client.get(url)
File "/home/zhu/zhu-env/lib/python3.10/site-packages/webdriver_manager/core/http.py", line 35, in get
raise exceptions.ConnectionError(f"Could not reach host. Are you offline?")
requests.exceptions.ConnectionError: Could not reach host. Are you offline?

二、原因

  根据报错信息,是网络连接错误导致的报错。

  因为网路连接正常,并且阿猪近期并没有对程序代码做过改动,所以猜测可能是Chrome浏览器自动升级导致webdriver-manager无法匹配到合适的ChromeDriver。但是在pypi官网检查了webdriver-manager的最新版本,和本地是一致的。所以初步排除是webdriver-manager的问题,或者说即使是它的问题也无法通过升级来尝试解决。

  于是阿猪猜测可能是网络环境的问题,导致近期国内无法正常访问webdriver-manager工作时需要访问的远程服务器。经过后边的尝试,基本确定了是这个原因。

三、解决方法

1、更换网络环境

  在Windows环境下,阿猪尝试使用代理进行连接,然后重新运行代码,可以恢复正常。

  在Linux环境下,阿猪也尝试了使用代理进行连接,即使开启了全局代理,浏览器访问网页也正常,但是仍然报错。最后电脑连接了手机热点,通过手机流量才正常。不知何故,懒得去研究。

2、改为指定具体的ChromeDriver文件

  虽然更换网络环境可以解决问题,但是每次运行代码的时候对网络环境都有依赖,不一定方便。

  所以阿猪暂时放弃了使用webdriver-manager管理ChromeDriver,改为直接下载对应版本的ChromeDriver然后直接在python代码中指定这个文件。(参考文章:如何下载与Chrome浏览器的版本相匹配的ChromeDriver

  这个方法的缺点是需要手动为不同的系统环境和Chrome浏览器版本下载对应的版本,并且当Chrome浏览器的版本更新到一定程度后,需要重新下载对应的版本,长期比较麻烦。