Python3.12用nodriver启动浏览器遇NoneType解包错误求助
nodriver启动无头浏览器时出现TypeError(NoneType解包)问题
复现脚本
import nodriver as uc import time import logging logging.basicConfig(level=logging.DEBUG) async def test_nodriver(): agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" try: browser = await uc.start(headless=True, browser_args=[f"--user-agent={agent}"]) logging.info("Browser started successfully") page = await browser.get("https://www.nowsecure.nl") time.sleep(1) await browser.start.save_screenshot("image.png") logging.info("Screenshot saved successfully") except Exception as e: logging.error(f"Failed to start browser: {e}") if __name__ == "__main__": uc.loop().run_until_complete(test_nodriver())
错误回溯
Traceback (most recent call last): File "/home/me/project/src/test_nodriver.py", line 22, in <module> uc.loop().run_until_complete(test_nodriver()) File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete return future.result() ^^^^^^^^^^^^^^^ File "/home/me/project/src/test_nodriver.py", line 10, in test_nodriver browser = await uc.start(headless=True, browser_args=[f"--user-agent={agent}"]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/me/project/.venv/lib/python3.12/site-packages/nodriver/core/util.py", line 96, in start return await Browser.create(config) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/me/project/.venv/lib/python3.12/site-packages/nodriver/core/browser.py", line 91, in create await instance.start() File "/home/me/project/.venv/lib/python3.12/site-packages/nodriver/core/browser.py", line 394, in start await self.connection.send(cdp.target.set_discover_targets(discover=True)) File "/home/me/project/.venv/lib/python3.12/site-packages/nodriver/core/connection.py", line 420, in send await self._prepare_headless() File "/home/me/project/.venv/lib/python3.12/site-packages/nodriver/core/connection.py", line 499, in _prepare_headless response, error = await self._send_oneshot( ^^^^^^^^^^^^^^^ TypeError: cannot unpack non-iterable NoneType object
环境信息
- 操作系统:Linux Ubuntu 24.04.1 LTS
- Python版本:3.12.6
- nodriver版本:0.37
- Chromium版本:130.0.6723.69(Snap安装)
问题描述
旧环境中可正常运行的nodriver代码,更新到新环境后启动无头浏览器失败。错误显示在连接初始化阶段,_send_oneshot方法返回了None,导致无法解包成response和error两个变量。怀疑是nodriver与新版Chromium的兼容性问题,或是无头模式下WebSocket通信逻辑存在bug。
解决方案建议
1. 降级Chromium版本
nodriver 0.37的适配范围可能不包含Chromium 130.x,可尝试降级到129.x或更早的稳定版本:
# 卸载Snap版Chromium sudo snap remove chromium # 添加旧版源并安装指定版本 echo "deb http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/noble-updates.list sudo apt update sudo apt install chromium-browser=129.0.6668.90-0ubuntu0.24.04.1 # 锁定版本防止自动更新 sudo apt-mark hold chromium-browser
2. 切换旧版无头模式参数
新版Chromium的无头模式有两种实现,显式指定旧版模式:
browser = await uc.start( headless=True, browser_args=[ f"--user-agent={agent}", "--headless=old" ] )
3. 升级nodriver到最新版本
检查是否有修复该问题的新版本:
pip install --upgrade nodriver
若稳定版未修复,可尝试预发布版本:
pip install --upgrade --pre nodriver
4. 临时修改nodriver源码(Workaround)
若上述方法无效,可临时修改connection.py中的逻辑,添加None值判断:
找到/home/me/project/.venv/lib/python3.12/site-packages/nodriver/core/connection.py第499行附近,修改为:
result = await self._send_oneshot( cdp.page.navigate(url="about:blank"), timeout=5, ) response, error = result if result is not None else (None, None)
注意:此修改会在包升级后被覆盖,仅作为临时方案。
内容的提问来源于stack exchange,提问作者Rafael Martinelli
相关产品推荐
相关产品推荐

