如何使用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()
关键修改说明:
- 执行
Network.enable时必须传入空字典{},这是CDP命令的参数要求,即使没有额外配置项 - 用
add_cdp_listener替代execute_cdp_cmd来注册事件监听器,确保回调函数能在事件触发时被调用 - 传递回调函数时直接写函数名(如
RequestSent),不要加括号调用,否则会立即执行函数而非注册监听
内容的提问来源于stack exchange,提问作者Nithin Piratez
相关产品推荐
相关产品推荐

