You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 18:55:07