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

如何让多个Selenium WebDriver实例共享会话数据以保持登录状态?

解决Selenium多WebDriver实例共享登录会话的问题

核心思路:目标网站通过浏览器的**用户配置文件(Profile)**识别会话,跨实例登出是因为每个WebDriver默认使用独立的临时配置文件。让多个实例共享同一个配置文件,就能模拟同一浏览器的会话状态,避免互相踢下线。

针对Chrome的具体实现步骤

1. 复制现有Chrome配置文件

先找到Chrome默认配置文件的路径,复制到一个独立目录(避免污染默认配置):

  • Windows: C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data\Default
  • macOS: ~/Library/Application Support/Google/Chrome/Default
  • Linux: ~/.config/google-chrome/Default

比如复制到项目目录下的./chrome_shared_profile文件夹。

2. 配置WebDriver加载共享配置

每个WebDriver实例都指定这个共享配置文件路径,示例代码:

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

def get_shared_chrome_driver(port=9222):
    chrome_options = Options()
    # 指定共享用户数据目录
    chrome_options.add_argument(r"--user-data-dir=./chrome_shared_profile")
    # 为每个实例分配不同调试端口,避免冲突
    chrome_options.add_argument(f"--remote-debugging-port={port}")
    return webdriver.Chrome(options=chrome_options)

# 创建两个共享会话的实例
driver_a = get_shared_chrome_driver(9222)
driver_b = get_shared_chrome_driver(9223)

3. 初始化登录状态

第一次运行时,用任意一个实例登录目标网站,登录后的Cookie、会话信息会自动保存到共享配置文件中。后续所有实例启动后,都会自动处于已登录状态,且不会互相挤下线。

关键注意事项

  • 所有实例必须使用完全相同的配置文件路径,路径要写绝对路径或者相对项目根目录的路径,避免因工作目录变化导致找不到配置。
  • 不要直接使用Chrome的默认Default配置文件,否则会和你日常使用的Chrome浏览器会话冲突。
  • 如果遇到“端口被占用”的错误,给每个实例分配不同的--remote-debugging-port值(范围建议9222-9300)。

为什么之前的尝试没效果?

  • Window handles是单WebDriver实例内的标签页管理,本质还是一个浏览器进程,无法实现多实例的并行效率提升。
  • ChromeOptions的核心是通过--user-data-dir指定共享配置,之前没找到方向是没抓住“共享用户会话数据”这个核心点。

其他浏览器的适配方案

  • Firefox:使用firefox_options.add_argument("--profile=./firefox_shared_profile")指定共享配置文件路径,原理相同。
  • Edge:基于Chromium内核,和Chrome配置逻辑一致,替换为EdgeOptions即可。

内容的提问来源于stack exchange,提问作者Марко Костић

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:10:29