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

如何从独立Python进程复用Selenium浏览器会话

跨进程复用Selenium浏览器会话的解决方案

我之前也碰到过一模一样的问题!同一个脚本里复用会话顺风顺水,拆成独立脚本就炸了,本质是跨进程没法直接共享内存里的Driver对象,得靠Selenium的Remote WebDriver机制来连接已有会话,咱们一步步来搞定:

一、先确保原浏览器会话启动时开启远程调试

这是最关键的一步!如果原进程启动浏览器时没开远程调试端口,外部进程根本连不上。以Chrome为例,启动代码要加这些参数:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 开启远程调试端口(选一个没被占用的端口,比如9222)
chrome_options.add_argument("--remote-debugging-port=9222")
# 或者用debuggerAddress参数,效果一样
# chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

# 启动浏览器
driver = webdriver.Chrome(options=chrome_options)

二、保存原会话的关键信息

原进程启动浏览器后,需要把会话的session_id和command_executor地址存下来(比如写到临时文件),让独立脚本能拿到这些信息:

import json

# 提取会话核心信息
session_info = {
    "session_id": driver.session_id,
    "executor_url": driver.command_executor._url
}

# 写入文件,供独立脚本读取
with open("session_info.json", "w") as f:
    json.dump(session_info, f)

三、独立脚本连接已有会话

独立脚本不能直接初始化新的Driver,要通过Remote WebDriver来对接原会话:

from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
import json

# 读取原会话的信息
with open("session_info.json", "r") as f:
    session_info = json.load(f)

# 初始化空的Remote Driver对象
driver = WebDriver(
    command_executor=session_info["executor_url"],
    desired_capabilities={}
)
# 手动绑定原会话的session_id
driver.session_id = session_info["session_id"]

# 测试一下,比如打印当前页面标题
print(driver.title)

四、你遇到的urllib错误原因

你贴的报错是urllib连接失败,大概率是这两个原因:

  • 原浏览器没开远程调试端口,导致独立脚本找不到可连接的执行器地址
  • 独立脚本没有用Remote WebDriver连接,而是直接初始化新Driver,相当于新建了一个会话,和原会话完全无关

额外注意事项

  • 两个进程必须用相同版本的Selenium,版本不兼容会出现各种奇怪的连接错误
  • 确保远程调试端口没被其他程序占用,可以用lsof -i :9222(Mac/Linux)或者netstat -ano | findstr :9222(Windows)检查
  • 原进程关闭后,会话会被销毁,独立脚本就没法连接了
  • 如果用Firefox,需要用--remote-debugging-port参数,或者配置GeckoDriver的远程连接方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:31:09