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

复用Chromium Selenium会话时出现KeyError: 'sessionId'问题求助

解决Selenium重连Chromium会话时的KeyError: 'sessionId'问题

我之前也碰到过这个坑!当你想复用已经存在的Selenium会话(不想每次都新开浏览器窗口)时,直接用常规方法调用会因为sessionId获取或传递的问题抛出KeyError: 'sessionId',@TarunLalwani的猴子补丁确实是个靠谱的解决方案,我把完整的实现代码和细节给你整理好:

from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver

# 1. 初始化浏览器会话,获取会话核心参数
driver = webdriver.Chrome()  # 替换为你的Chromium驱动实例
executor_url = driver.command_executor._url
session_id = driver.session_id

# 测试初始会话
driver.get("http://example.com")
print(f"当前会话ID: {session_id}")
print(f"执行器URL: {executor_url}")

# 销毁驱动实例,但保留浏览器会话(后台仍运行)
driver.quit()

# 2. 实现猴子补丁函数,用于重连已有会话
def create_driver_session(session_id, executor_url):
    # 创建RemoteWebDriver基础实例
    driver = RemoteWebDriver(command_executor=executor_url, desired_capabilities={})
    # 强制赋值已有session_id,绕过Selenium默认的会话验证流程
    driver.session_id = session_id
    return driver

# 3. 执行重连操作
reconnected_driver = create_driver_session(session_id, executor_url)

# 验证重连成功
print(f"重连后页面标题: {reconnected_driver.title}")
reconnected_driver.get("http://example.org")
print(f"跳转新页面后标题: {reconnected_driver.title}")

# 最后记得彻底关闭会话
reconnected_driver.quit()

为什么会出现KeyError: 'sessionId'?

出现这个错误的核心原因是:Selenium默认的会话初始化流程会向驱动服务器请求新的会话信息,当你尝试复用已有会话时,如果没有正确传递或覆盖session_id,服务器返回的响应中就不会包含sessionId字段,导致抛出KeyError。这个猴子补丁的关键就是直接给新驱动实例赋值已有的session_id,跳过了默认的会话创建步骤,强制复用现有会话。

注意事项

  • 务必保证chromedriver版本与Chromium浏览器版本严格匹配,版本不兼容会导致会话无法正常复用
  • 会话并非永久有效:如果浏览器被手动关闭、会话超时,或者驱动服务器销毁了会话,重连操作会失败
  • 若使用Firefox,只需将webdriver.Chrome()替换为webdriver.Firefox(),逻辑完全通用
  • 若是在Selenium Grid远程环境中,executor_url需要替换为Grid的服务地址(例如http://your-grid-host:4444/wd/hub)

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:14:19