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

求助:如何用Python+Selenium获取Chrome DevTools网络面板内容?

使用Selenium获取Chrome Network面板内容的可行方案

完全可行的!你之前没成功大概率是因为没用到Chrome DevTools Protocol(CDP)——Selenium基础API没法直接抓取Network面板的请求/响应数据,但通过CDP和浏览器底层通信,就能轻松实现这个需求。

核心思路

Chrome DevTools提供了一套协议,允许外部工具(比如你的Selenium脚本)监听和控制浏览器的网络活动。我们需要通过Selenium的execute_cdp_cmd()方法调用CDP命令,启用Network域并监听相关事件,从而捕获Network面板里的所有请求数据。

修正后的完整代码(适配你的Python 2.7环境)

结合你给出的代码片段,下面是可以直接运行的示例:

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

# 你的chromedriver路径
chrome_path = r"C:\Python27\chromedriver_win32/chromedriver.exe"

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920x1080")  # 补全窗口参数

# 初始化Chrome驱动
driver = webdriver.Chrome(executable_path=chrome_path, options=chrome_options)

# 第一步:启用Network域,开启网络监听
driver.execute_cdp_cmd("Network.enable", {})

# 用来存储所有网络日志的列表
network_logs = []

# 第二步:定义回调函数,捕获请求发送事件
def capture_request(event_data):
    network_logs.append(event_data)

# 注册监听:当"requestWillBeSent"事件触发时,调用回调函数
driver.execute_cdp_cmd("Network.requestWillBeSent", {}, capture_request)

# 可选:监听响应接收事件,获取响应详情
def capture_response(event_data):
    network_logs.append(event_data)

driver.execute_cdp_cmd("Network.responseReceived", {}, capture_response)

# 第三步:访问目标页面(替换成你要抓取的网址)
driver.get("https://example.com")

# 第四步:处理并打印捕获到的网络数据
for log in network_logs:
    # 打印请求信息
    if "request" in log:
        print "请求URL: %s" % log["request"]["url"]
        print "请求方法: %s" % log["request"]["method"]
    # 打印响应信息
    if "response" in log:
        print "响应状态码: %d" % log["response"]["status"]
    print "----------------------------------------"

# 关闭浏览器
driver.quit()

关键注意事项(帮你避坑)

  • 版本匹配:确保你的chromedriver版本和Chrome浏览器版本完全对应,版本不兼容会导致CDP命令执行失败(这是最常见的问题!)
  • Python 2.7兼容性:示例中用了Python 2.7的字符串格式化方式(%),如果你误用Python 3的f-string会报错
  • 按需监听事件:除了requestWillBeSent和responseReceived,你还可以监听Network.loadingFinished(请求完成)、Network.requestFailed(请求失败)等事件,按需获取数据
  • 获取响应体:如果需要获取响应的具体内容(比如HTML、JSON),可以调用Network.getResponseBody命令,但需要传入请求的requestId,且要确保请求已经完成

为什么之前的方案没成功?

大部分新手会直接用Selenium的常规API尝试抓取网络数据,但Selenium本身是为模拟用户交互设计的,没有暴露Network面板的接口。必须通过CDP这个“后门”才能直接和浏览器的网络模块通信,这也是你之前失败的核心原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:11:35