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

如何通过代码获取Chrome DevTools的WebSocket地址(Selenium场景)

获取Chrome DevTools WebSocket地址的方法

嘿,这个问题我之前也折腾过!默认情况下ChromeDriver确实会把DevTools的WebSocket地址输出到标准输出,但直接从driver实例里找不到现成的属性来获取它,不过有两个可靠的方法可以搞定:

方法一:通过Selenium日志API捕获(推荐)

这是最省心的方式,只需要配置Chrome的日志参数,然后通过Selenium自带的日志接口提取地址:

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

# 配置Chrome选项,开启日志并设置足够低的日志级别
chrome_options = Options()
chrome_options.add_argument('--enable-logging')
chrome_options.add_argument('--log-level=0')  # INFO级别,确保能捕获到DevTools地址的日志

# 启动Chrome Driver
driver = webdriver.Chrome(options=chrome_options)

# 遍历driver日志,提取WebSocket地址
devtools_ws_url = None
for log_entry in driver.get_log('driver'):
    if 'DevTools listening on' in log_entry['message']:
        # 拆分日志消息拿到地址
        devtools_ws_url = log_entry['message'].split('DevTools listening on ')[1].strip()
        break

if devtools_ws_url:
    print(f"找到DevTools WebSocket地址:{devtools_ws_url}")
else:
    print("未找到DevTools WebSocket地址")

# 后续业务操作...
driver.quit()

说明:

  • --enable-logging用于开启Chrome的日志输出,--log-level=0对应INFO级别,保证不会漏掉包含WebSocket地址的日志条目。
  • 日志里的关键词DevTools listening on在不同ChromeDriver版本中基本稳定,所以用字符串拆分或者正则匹配都能准确提取地址。

方法二:直接捕获ChromeDriver进程的标准输出

如果第一种方法在你的环境里不生效(比如日志被系统重定向),可以手动启动ChromeDriver进程并读取它的标准输出:

import subprocess
import re
from selenium.webdriver.remote.webdriver import WebDriver

# 启动ChromeDriver进程,捕获标准输出
chromedriver_proc = subprocess.Popen(
    ['chromedriver', '--port=9515'],  # 指定端口避免冲突
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    text=True
)

# 逐行读取输出,匹配WebSocket地址
devtools_ws_url = None
for line in iter(chromedriver_proc.stdout.readline, ''):
    match_result = re.search(r'DevTools listening on (ws://.*)', line)
    if match_result:
        devtools_ws_url = match_result.group(1)
        break

if devtools_ws_url:
    print(f"找到DevTools WebSocket地址:{devtools_ws_url}")
    # 通过RemoteWebDriver连接到ChromeDriver
    driver = WebDriver(command_executor='http://localhost:9515', desired_capabilities={'browserName': 'chrome'})
    # 后续业务操作...
    driver.quit()
else:
    print("未找到DevTools WebSocket地址")

# 终止ChromeDriver进程
chromedriver_proc.terminate()

说明:

  • 这种方式需要手动管理ChromeDriver进程,还要注意端口冲突问题,所以建议指定固定端口。
  • 适合需要完全控制进程输出的场景,但日常使用还是第一种方法更方便。

内容的提问来源于stack exchange,提问作者Max Mikhaylov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:34:41