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

如何使用Selenium Python的execute_cdp_cmd()捕获Chrome网络请求响应日志

解决Selenium Python捕获Chrome网络请求与响应日志的问题

你的代码存在两个核心问题:

  • 错误使用execute_cdp_cmd注册事件监听器:execute_cdp_cmd的作用是执行CDP命令(比如启用网络监控),但注册网络事件的回调函数需要用add_cdp_listener()方法
  • 错误传递回调函数:代码里RequestSent()和ResponseReceived()是直接调用函数,而非传递函数对象作为回调,导致函数在注册阶段就被执行,无法监听后续事件

修正后的完整代码:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from time import sleep

siteURL = "https://www.executeautomation.com/search"

site = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

def RequestSent(**sent):
    print("SENT", sent)

def ResponseReceived(**recv):
    print("RECV", recv)

# 启用网络监控,需传递空字典参数(CDP命令要求)
site.execute_cdp_cmd("Network.enable", {})

# 使用add_cdp_listener注册事件回调,传入函数对象(不要加括号)
site.add_cdp_listener("Network.requestWillBeSent", RequestSent)
site.add_cdp_listener("Network.responseReceived", ResponseReceived)

site.get(siteURL)

sleep(20)

# 可选:移除监听器,避免资源泄漏
site.remove_cdp_listener("Network.requestWillBeSent", RequestSent)
site.remove_cdp_listener("Network.responseReceived", ResponseReceived)

site.close()

关键修改说明:

  1. 执行Network.enable时必须传入空字典{},这是CDP命令的参数要求,即使没有额外配置项
  2. 用add_cdp_listener替代execute_cdp_cmd来注册事件监听器,确保回调函数能在事件触发时被调用
  3. 传递回调函数时直接写函数名(如RequestSent),不要加括号调用,否则会立即执行函数而非注册监听

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:15:34