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

如何让Python中的Selenium读取已打开的Chrome页面?

如何让Python中的Selenium读取已打开的Chrome页面?

嘿,我完全懂你的烦恼——每次想用Selenium操作已经打开的Chrome页面,结果要么报错说找不到driver,要么直接新开一个窗口,根本不是你要的那个。咱们来一步步解决这个问题,顺便把你代码里的小问题也修正一下。

首先,先说说你原来代码里的几个明显问题,避免之后再踩坑:

  • 你直接用了driver.current_url,但这时候driver变量还没定义呢,肯定会抛错
  • 你把driver.title赋值给了driver变量,这直接把驱动对象覆盖成了字符串,后面再用driver.find_element肯定会报错,这是变量名混乱导致的

接下来是核心:怎么让Selenium连接到已经打开的Chrome窗口。这需要你先以调试模式启动Chrome,然后让Selenium附加到这个调试端口上。

步骤1:以调试模式启动Chrome

首先,关闭所有正在运行的Chrome窗口(包括后台的),然后用命令行启动Chrome,开启远程调试功能:

  • Windows系统:打开命令提示符(CMD),输入类似下面的命令(注意Chrome的安装路径可能和你不一样,自己调整):
    "C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="C:\selenium\ChromeProfile"
    
  • Mac系统:打开终端,输入:
    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222 --user-data-dir="/Users/你的用户名/selenium/ChromeProfile"
    
  • Linux系统:打开终端,输入:
    google-chrome --remote-debugging-port=9222 --user-data-dir="/home/你的用户名/selenium/ChromeProfile"
    

这里的两个参数要注意:

  • --remote-debugging-port=9222:指定一个调试端口,之后Selenium会通过这个端口连接Chrome
  • --user-data-dir:指定一个独立的Chrome配置文件目录,避免和你平时用的Chrome配置冲突,这个路径可以自己随便设,不存在的话会自动创建

执行命令后,Chrome会正常打开,这时候你可以手动打开你想要操作的页面。

步骤2:用Python代码连接到这个已打开的Chrome窗口

现在写Python代码,让Selenium附加到刚才启动的调试窗口,而不是新开一个:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

# 配置Chrome选项,指定连接到已打开的调试窗口
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "localhost:9222")

# 初始化驱动,这一步会直接连接到已打开的Chrome窗口,不会新开!
driver = webdriver.Chrome(options=chrome_options)

# 现在就可以正常操作你已经打开的页面了
print("当前页面URL:", driver.current_url)
print("当前页面标题:", driver.title)

# 正确查找元素的写法,别再覆盖driver变量啦
try:
    download_speed = driver.find_element(By.CLASS_NAME, "download-speed")
    print("下载速度元素内容:", download_speed.text)
except Exception as e:
    print("找不到目标元素,错误信息:", e)

# 注意:如果想保留原来的Chrome窗口,不要用driver.quit(),用driver.close()只会关闭当前标签页
# driver.close()  # 关闭当前操作的标签页
# driver.quit()   # 关闭整个Chrome浏览器(包括你手动打开的窗口)

一些额外注意事项

  • 一定要确保启动Chrome前,所有Chrome进程都关闭了,否则调试端口可能无法正常监听
  • 端口号可以自己改(比如改成9223),但要保证命令行的--remote-debugging-port和代码里的debuggerAddress端口号一致
  • --user-data-dir的路径不要和你平时用的Chrome配置目录重复,否则可能会出现冲突或者数据覆盖的问题

备注:内容来源于stack exchange,提问作者Leonardo Momo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:53:10