如何让Selenium复用现有Chrome实例的已登录会话?
如何复用已登录Chrome会话实现Selenium表单自动化?
问题背景
你正在为一款Web应用开发表单填充自动化脚本,流程要求先登录再填写多页表单。但目前编写的Selenium脚本启动的Chrome窗口总是未登录状态,而你已经有一个Chrome窗口用测试账号完成了登录,访问应用时无需重复验证。希望能复用这个已登录的会话,省去脚本里的登录步骤。
你的现有脚本(注意这里你误写了webdriver.Ie,实际应该用Chrome驱动):
from selenium import webdriver driver = webdriver.Ie("C:\\Python\\Selenium\\Chrome\\chromedriver.exe") driver.add_cookie() driver.set_page_load_timeout(30) driver.get("myurl/formpages") driver.maximize_window() driver.quit()
解决方案
有两种可靠的方法可以实现会话复用,我分别给你详细说明:
方法一:指定Chrome用户数据目录复用登录状态
Chrome会把用户的登录会话、Cookie等数据存在用户数据目录里,只要Selenium启动的Chrome使用这个目录,就能直接复用已有的登录状态。
步骤如下:
找到Chrome用户数据目录
- Windows:
C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data(把<你的用户名>替换成实际系统用户名) - Mac:
~/Library/Application Support/Google/Chrome/ - Linux:
~/.config/google-chrome/
- Windows:
修改Selenium脚本配置
在脚本中通过ChromeOptions指定这个用户数据目录,同时修正之前的webdriver.Ie错误:
from selenium import webdriver from selenium.webdriver.chrome.options import Options # 配置Chrome选项,指定用户数据目录 chrome_options = Options() # 注意路径里的"User Data"不要加后缀(比如Default),否则会新建一个用户配置 chrome_options.add_argument(r"user-data-dir=C:\Users\<你的用户名>\AppData\Local\Google\Chrome\User Data") # 初始化Chrome驱动,传入配置 driver = webdriver.Chrome( executable_path="C:\\Python\\Selenium\\Chrome\\chromedriver.exe", options=chrome_options ) driver.set_page_load_timeout(30) driver.get("myurl/formpages") driver.maximize_window() # 执行表单填充操作... # 注意:如果不想销毁整个浏览器会话(影响你日常使用的Chrome),用driver.close()关闭当前标签页即可,不要用driver.quit() # driver.close()
注意事项:
- 运行脚本前必须关闭所有Chrome窗口,因为同一个用户数据目录不能被多个Chrome实例同时占用,否则会报错。
- 如果不想干扰日常使用的Chrome,可以复制一份用户数据目录到其他位置,脚本中指定复制后的路径,这样脚本用的是独立的副本。
方法二:连接已运行的Chrome调试实例
如果你想直接连接已经打开的、处于登录状态的Chrome窗口,可以开启Chrome的远程调试模式,让Selenium直接附着到这个实例上。
步骤如下:
启动带调试端口的Chrome
先关闭所有Chrome窗口,然后通过命令行启动Chrome并开启调试端口:- Windows:打开命令提示符,运行
chrome.exe --remote-debugging-port=9222 - Mac:打开终端,运行
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 - Linux:打开终端,运行
google-chrome --remote-debugging-port=9222
- Windows:打开命令提示符,运行
手动登录目标应用
在启动的Chrome窗口中,手动登录你的测试账号,保持窗口打开。修改Selenium脚本连接调试实例
from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() # 指定调试地址,和启动Chrome时的端口一致 chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") # 初始化驱动,连接到已运行的Chrome实例 driver = webdriver.Chrome( executable_path="C:\\Python\\Selenium\\Chrome\\chromedriver.exe", options=chrome_options ) driver.set_page_load_timeout(30) driver.get("myurl/formpages") driver.maximize_window() # 执行表单填充操作... # 注意:不要用driver.quit(),否则会关闭你手动打开的Chrome窗口,用driver.close()关闭当前标签页即可 # driver.close()
注意事项:
- 调试端口可以自定义(比如9223),只要不被其他程序占用就行,脚本里的
debuggerAddress要和启动时的端口对应。 - 这种方法适合需要同时保留手动操作窗口和自动化脚本窗口的场景。
内容的提问来源于stack exchange,提问作者FlameDra
相关产品推荐
相关产品推荐

