Selenium 4 Python网络日志问题求助:无法获取performance日志
解决Selenium 4捕获Chrome请求响应的问题
问题原因
你遇到的invalid argument: log type 'performance' not found报错,是因为Chrome 104+配合Selenium 4时,原有的goog:loggingPrefs方式已不再支持直接启用performance日志,必须通过Chrome DevTools Protocol(CDP)来开启网络监控。
Python实现方案
直接通过CDP命令启用网络跟踪,再解析performance日志获取请求和响应信息,代码示例如下:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import json # 初始化Chrome选项(按需添加headless、禁用GPU等参数) options = Options() # 启动ChromeDriver driver = webdriver.Chrome(options=options) # 启用CDP网络监控 driver.execute_cdp_cmd('Network.enable', {}) # 访问目标页面 driver.get('https://你的目标网址.com') # 获取performance日志 performance_logs = driver.get_log('performance') # 解析日志,提取请求与响应 for entry in performance_logs: log_details = json.loads(entry['message'])['message'] # 处理请求发送事件 if log_details['method'] == 'Network.requestWillBeSent': request_info = log_details['params']['request'] print(f"[请求] URL: {request_info['url']}") print(f"[请求] 方法: {request_info['method']}") # 打印请求头(可选) print(f"[请求] 头部: {request_info['headers']}") # 打印POST请求体(如果有) if 'postData' in request_info: print(f"[请求] 体: {request_info['postData']}\n") # 处理响应接收事件 elif log_details['method'] == 'Network.responseReceived': response_info = log_details['params']['response'] print(f"[响应] URL: {response_info['url']}") print(f"[响应] 状态码: {response_info['status']}") # 打印响应头(可选) print(f"[响应] 头部: {response_info['headers']}") # 尝试获取响应体 try: response_body = driver.execute_cdp_cmd( 'Network.getResponseBody', {'requestId': log_details['params']['requestId']} ) print(f"[响应] 体: {response_body['body']}\n") except Exception as e: print(f"[响应] 无法获取响应体: {str(e)}\n") # 关闭浏览器 driver.quit()
注意事项
- 不是所有响应都能成功获取响应体,比如二进制资源、已缓存的响应可能会返回失败,需根据业务场景处理。
- 如果需要监听实时请求(而非页面加载后一次性获取),可以结合
driver.execute_cdp_cmd('Network.setRequestInterception', {'patterns': [{'urlPattern': '*'}]})来实现拦截和实时处理。
内容的提问来源于stack exchange,提问作者FSelenium
相关产品推荐
相关产品推荐

