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

如何在独立Python函数中重新连接已打开的Selenium WebDriver

复用已登录Chrome会话的问题修复

问题场景

目标系统每次启动新浏览器都需完成完整登录及短信验证,希望实现用户仅登录一次,在浏览器窗口关闭前,可持续向同一窗口发送自动化指令。

现有代码问题

当前实现思路存在两处关键错误:

  1. 第一个脚本保存的command_executor._url是Selenium驱动的服务通信地址,当第一个脚本执行完毕后,该驱动服务大概率会终止,导致第二个脚本无法连接。
  2. 第二个脚本错误地将驱动服务URL赋值给debuggerAddress参数,且使用Remote类的方式不符合Chrome远程调试的复用逻辑。

错误原因

报错WinError 10061是因为第二个脚本尝试连接的驱动服务已关闭,目标机器主动拒绝了连接。正确的会话复用方式是通过Chrome的远程调试模式直接连接已运行的浏览器实例,而非依赖已终止的驱动服务。

修复后的代码实现

第一步:启动浏览器并开启远程调试(保存会话信息)

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

url = "http://www.stackoverflow.com"

opt = Options()
# 固定远程调试端口(可自定义,比如9222)
opt.add_argument("--remote-debugging-port=9222")
# 让浏览器在脚本结束后保持打开状态
opt.add_experimental_option("detach", True)

swd = Chrome(options=opt)
swd.get(url)

# 保存远程调试地址,而非驱动服务URL
session = {'debugger_address': 'localhost:9222'}

with open('session.json', 'w') as file:
    json.dump(session, file)

第二步:连接已运行的浏览器并执行操作

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

with open("session.json", "r") as file:
    session = json.load(file)

opt = Options()
# 通过debuggerAddress直接连接已运行的浏览器实例
opt.add_experimental_option("debuggerAddress", session['debugger_address'])

# 使用Chrome类初始化,无需Remote
swd = Chrome(options=opt)

# 示例操作:打印当前页面标题
print(swd.title)

# 若需保持浏览器窗口打开,请勿调用quit()
# swd.quit()

关键说明

  • 远程调试端口需固定,确保两个脚本使用同一端口连接
  • 第一个脚本启动浏览器后,需保持浏览器窗口处于打开状态
  • 第二个脚本通过debuggerAddress复用会话,无需依赖原驱动服务
  • 执行完操作后若不想关闭浏览器,注释掉swd.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:06:35