【Python】关于使用selenium安装失败的问题(2024.1)

一、背景

在练习爬网站的时候,会遇到一些问题:

    1、代码都正确,本地解析出来没有具体内容;

    2、浏览器源码看到的内容很多,解析出来只有一部分;

    3、有些网页需要滚动鼠标才加载内容,就是所谓的动态加载。

这个时候,selenium进入我的视野,因为他能模拟浏览器操作,实现动态加载。

但是,我按照网上教程下载安装,始终都失败,然后又花费了几天的时间,都要崩溃了。。。

所幸今天终于运行成功,通过selenium打开了网页!!! 2024年1月12日 值得纪念的一天!

下面分享一下安装的经历,以及我踩的坑,可以直接去看总结部分。

二、安装chromedriver

    1、下载

    首先是找chromedriver,我电脑谷歌浏览器的版本太高了,找不到chromedriver,因为我的谷歌浏览器装了很多插件又不想卸载重装浏览器,而我的edge浏览器,早在我之前重装系统的时候被我干掉了,现在想装edge也装不上,然后我的火狐浏览器也没有现成的驱动......

    我根据网友教程去到chromedriver的下载地址基本都是支持测试版,而且谷歌的历史版本一点都不好找,找到了他还不一定有driver......

    终于皇天不负有心人,找到了这个谷歌历史版本的网站:Chromium History  请好好收藏这个网站!进入这个网站,找到自己电脑版本,下面那里谷歌版本随便选一个

Traceback (most recent call last): File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\demo.py", line 29, in <module> from inder import LianjiaSpider File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\inder.py", line 23, in <module> from seleniumwire import webdriver File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\webdriver.py", line 28, in <module> from seleniumwire import backend, utils File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\backend.py", line 4, in <module> from seleniumwire.server import MitmProxy File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\server.py", line 5, in <module> from seleniumwire.handler import InterceptRequestHandler File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\handler.py", line 5, in <module> from seleniumwire import har File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\har.py", line 11, in <module> from seleniumwire.thirdparty.mitmproxy import connections File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\thirdparty\mitmproxy\connections.py", line 10, in <module> from seleniumwire.thirdparty.mitmproxy.net import tls, tcp File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\thirdparty\mitmproxy\net\tls.py", line 15, in <module> import seleniumwire.thirdparty.mitmproxy.options File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\thirdparty\mitmproxy\options.py", line 5, in <module> from seleniumwire.thirdparty.mitmproxy import optmanager File "D:\Python\PyCharm 2024.2.4\PythonCode\zufang\.venv\Lib\site-packages\seleniumwire\thirdparty\mitmproxy\optmanager.py", line 9, in <module> import blinker._saferef ModuleNotFoundError: No module named 'blinker._saferef'
06-13
<think>我们遇到了一个具体的问题:在Python项目中使用selenium-wire,但在重新部署时突然出现“ModuleNotFoundError:Nomodulenamed'blinker._saferef'”的错误。根据引用[1]的信息,这是因为selenium-wire依赖的blinker包在最新版本(1.8.0和1.8.1)中移除了`_saferef`模块,而selenium-wire项目已经不再维护(自20241月起)。解决方案的核心是:降低blinker的版本,使其包含`_saferef`模块。具体步骤:1.确定当前安装的blinker版本。可以通过命令`pipshowblinker`查看。2.如果blinker版本是1.8.0或1.8.1,则需要降级到1.7.0(或更早的版本,但1.7.0已知包含该模块)。3.执行降级命令:`pipinstallblinker==1.7.0`但是,注意selenium-wire可能对blinker的版本有要求(在旧版本中,它可能要求较新的blinker?)。因此,我们可能需要同时固定selenium-wire的版本,以避免兼容性问题。然而,由于selenium-wire已经不再维护,我们可能需要考虑长期解决方案:-方案1:固定blinker版本为1.7.0,并确保selenium-wire正常工作。-方案2:寻找selenium-wire的替代品(如selenium-wire的fork或其他类似工具)。根据问题描述,我们目前只需要解决`blinker._saferef`缺失的问题,因此方案1是最直接的。操作步骤:1.在项目的requirements.txt文件中,将blinker的版本固定为1.7.0。例如,将原来的`blinker>=1.7.0`(如果有)改为`blinker==1.7.0`。或者,如果没有显式指定blinker,则添加一行:`blinker==1.7.0`。2.重新安装依赖:```bashpipinstall-rrequirements.txt```3.如果使用虚拟环境,请确保激活虚拟环境后再执行上述命令。4.验证问题是否解决:重新运行项目,看是否还会出现ModuleNotFoundError。注意:selenium-wire本身可能已经不再更新,如果将来出现其他问题,可能需要考虑替代方案。另外,如果项目是通过其他方式管理依赖(比如使用Pipenv或Poetry),则需要在对应的文件中固定blinker版本。例如:-Pipenv:`pipenvinstallblinker==1.7.0`-Poetry:修改pyproject.toml中的blinker版本为`blinker="==1.7.0"`如果以上方法不能解决问题,可以考虑手动安装selenium-wire的某个旧版本,但通常不需要,因为selenium-wire在最新版本中并没有移除对blinker旧版本的依赖,只是blinker的新版本破坏了兼容性。如果问题仍然存在,可以尝试清除pip缓存并重新安装:```bashpipcachepurgepipinstall--no-cache-dir-rrequirements.txt```最后,如果项目需要长期维护,建议考虑迁移到其他维护活跃的类似工具,例如:-使用selenium直接配合代理设置(但selenium-wire提供的请求/响应拦截功能需要自己实现)。-或者寻找其他替代库,如pyseleniumwire(如果有活跃的fork)等。但根据当前问题,我们只需降级blinker即可。因此,总结解决方案为:将blinker降级到1.7.0版本。相关问题1.如何检查当前安装的blinker版本?2.除了降级blinker,还有其他方法解决`ModuleNotFoundError:Nomodulenamed'blinker._saferef'`吗?3.selenium-wire停止维护后,有哪些替代方案?</think>### Python selenium-wire 缺少 blinker._saferef 解决方案 问题分析: 此错误源于 `blinker` 包的更新(1.8.0+)移除了 `_saferef` 模块[^1],而不再维护的 `selenium-wire` 仍依赖该旧模块。解决方案需解决版本兼容性问题。 #### 解决方案步骤: 1. **强制降级 blinker 版本** 在终端执行: ```bash pip install blinker==1.7.0 --force-reinstall ``` 此版本(1.7.0)明确包含 `_saferef` 模块,与 `selenium-wire` 兼容[^1]。 2. **锁定依赖版本** 在 `requirements.txt` 中添加: ```requirements.txt blinker==1.7.0 selenium-wire==5.1.0 # 选择稳定版本 ``` 3. **验证安装** 运行 Python 检查模块是否存在: ```python import blinker._saferef # 不再报错即成功 ``` #### 备选方案(长期维护): - **改用维护分支**: 安装社区维护的 fork: ```bash pip install git+https://github.com/wkeeling/selenium-wire.git ``` - **替代工具**: 考虑迁移到活跃维护的替代库: ```bash pip install playwright # 或 selenium 直接操作代理 ``` #### 预防措施: ```bash # 创建隔离环境(推荐) python -m venv myenv source myenv/bin/activate pip install -r requirements.txt ``` > **关键提示**:此问题本质是依赖链断裂,需固定旧版本或切换工具链[^1]。若后续出现其他兼容性问题,建议评估迁移到 `playwright` 等现代方案。 --- ### 相关问题 1. 如何检测 Python 项目中已过时的依赖包? 2. 使用 `selenium-wire` 时如何实现请求/响应拦截的高级功能? 3. `playwright` 与 `selenium` 在自动化测试中有哪些核心差异? [^1]: 引用自 selenium-wire 依赖问题分析文档
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值