如何获取已手动打开的Chrome标签URL并通过程序实现交互操作
实现Selenium连接已运行Chrome实例的方案
第一步:启动带远程调试端口的Chrome
- 先关闭所有正在运行的Chrome进程(包括后台进程,避免端口参数不生效)
- 按操作系统执行启动命令(路径替换为你本地Chrome的实际安装路径):
- Windows系统:打开命令提示符执行
"C:\Program Files\Google\Chrome\Application\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系统:打开命令提示符执行
- 启动后你可以正常手动打开目标页面,完成登录等操作,所有已有的登录态都会正常保留。
第二步:编写Python代码连接已运行的Chrome
直接通过调试端口附加到刚才启动的Chrome实例即可,不需要新打开浏览器窗口,示例代码如下:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By # Selenium4及以上版本需要导入 # 配置调试地址 chrome_options = Options() chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222") # 初始化driver,此时会直接连接已运行的Chrome driver = webdriver.Chrome(options=chrome_options) # 测试:打印当前所有打开的标签页标题 for handle in driver.window_handles: driver.switch_to.window(handle) print(driver.title) # 后续可以正常执行元素定位、点击等操作,和常规Selenium用法完全一致 # driver.find_element(By.XPATH, "example_xpath").click()
注意事项
- 如果使用Selenium4及以上版本,
find_element_by_*系列方法已废弃,建议使用By类指定定位方式的写法 - 如果需要完全保留你平时Chrome的登录缓存、书签等配置,启动带端口的Chrome时不要额外指定
--user-data-dir参数,确保使用默认的用户数据目录即可 - 9222是默认调试端口,你可以替换为其他未被占用的端口,只要代码里的端口和启动参数里的保持一致即可
内容的提问来源于stack exchange,提问作者Poloczeker
相关产品推荐
相关产品推荐

