出现问题
最初是因为使用selenium爬虫的时候打不开浏览器,即便添加了自动下载最新版驱动的代码
options = webdriver.FirefoxOptions()
# 不加载图片,加快访问速度
options.set_preference('permissions.default.image', 2)
# 无头浏览器
# options.add_argument('--headless')
driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()), options=options)
还是会报这个错误:
requests.exceptions.ConnectionError: Could not reach host. Are you offline?
搜了下说是跟selenium、浏览器、驱动版本有关系。驱动应该是会自动下最新的,浏览器也更新了,那只可能是跟selenium版本有关系。然而尝试通过pip升级selenium时,
pip install --upgrade selenium
一直报如下错误:
Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', timeout('timed out'))': /simple/selenium/
可以看到“broken by 'ProkyError'”,说明是因为代理造成的。我用的公司电脑,在内网环境下确实是需要用代理上网的。但正常上网没有问题,搜到的一些说法也提到代理环境下无法使用pip的问题。
尝试方案
在网上搜索得到的结果包括但不限于:
- 使用国内镜像(添加-i http://pypi.douban.com/simple --trusted-host pypi.douban.com packagename参数)
- 关闭代理
- 修改环境变量、注册表(公司电脑权限有限,且不想折腾,所以没有进行尝试)
1和2尝试过后都无法解决。其中1部分既试了不同的镜像源地址,也直接修改了pip.ini文件设置,都没有任何效果;试了2以后则是从ProxyError报错变成了NewConnectionError
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x000001D81FC16AD0>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed')': /simple/selenium/
最终解决
最终是在茫茫多的教你用国内镜像的文章中,找到了一篇文章完美解决了我的问题:
pip install 提示代理连接失败原因及解决办法 - 快乐随行 - 博客园
虽然也是要用国内镜像,但写法不同结果却不一样:
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ --upgrade selenium
不知道--index和-i的区别是什么,但用这个方法确实可以成功使用pip更新和安装包了。非常感谢原文的作者提供的方法!