如何将已打开的谷歌Chrome标签页连接到Python脚本?
连接已打开Chrome标签页的解决方法
一、核心问题:Chrome未开启远程调试端口
你的代码卡住是因为目标Chrome进程没有启动远程调试模式,导致Selenium无法通过指定端口连接。必须先按以下方式启动Chrome:
不同系统的启动命令
Windows:找到Chrome安装路径(默认是
C:\Program Files\Google\Chrome\Application\chrome.exe),打开命令提示符运行:"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9014 --user-data-dir="C:\temp\chrome_debug_profile"注意:
--user-data-dir必须指定一个新的目录,避免和现有Chrome进程的用户数据冲突。Mac:打开终端运行:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9014 --user-data-dir="/tmp/chrome_debug_profile"Linux:终端运行:
google-chrome --remote-debugging-port=9014 --user-data-dir="/tmp/chrome_debug_profile"
二、验证端口可用性
启动Chrome后,打开浏览器访问http://localhost:9014/json/version,如果能返回JSON格式的调试信息,说明端口正常;如果无法访问,检查Chrome是否正确启动、端口是否被其他程序占用。
三、修正后的Selenium代码
确保Chrome已按上述方式启动,端口和代码中一致,原代码逻辑可正常运行,建议添加验证步骤:
from selenium import webdriver options = webdriver.ChromeOptions() options.add_experimental_option('debuggerAddress', 'localhost:9014') driver = webdriver.Chrome(options=options) # 验证连接成功 print(driver.title) # 获取并打印网页源码(示例打印前500字符) source_code = driver.page_source print(source_code[:500])
四、替代方案:使用Chrome DevTools协议
如果不想依赖Selenium,可直接通过Chrome的DevTools协议连接,示例代码:
import json import requests import websocket # 获取标签页的调试会话信息 response = requests.get('http://localhost:9014/json') tabs = json.loads(response.text) # 取第一个标签页的WebSocket调试地址 ws_url = tabs[0]['webSocketDebuggerUrl'] # 连接WebSocket并获取页面源码 ws = websocket.create_connection(ws_url) # 发送命令获取整个页面的HTML ws.send(json.dumps({ "id": 1, "method": "Runtime.evaluate", "params": {"expression": "document.documentElement.outerHTML"} })) result = json.loads(ws.recv()) source_code = result['result']['result']['value'] print(source_code[:500]) ws.close()
注意事项
- 不要同时启动多个使用同一个
--user-data-dir的Chrome进程,会导致端口冲突 - 端口可自定义(只要未被占用),代码中的端口号必须和启动命令一致
- 若仍卡住,检查本地防火墙是否拦截了9014端口的连接
内容的提问来源于stack exchange,提问作者Barbary
相关产品推荐
相关产品推荐

