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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:11:29