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

如何获取Python 3.10 + Selenium 4.1.3测试生成的网络数据?

获取Python 3.10 + Selenium 4.1.3测试的网络请求数据

可以通过Chrome DevTools Protocol(CDP)直接在Selenium中捕获网络请求,并将数据保存到本地文件,这样即使Chrome实例关闭后也能随时查看。以下是具体实现方案:

核心思路

利用Selenium 4内置的CDP支持,监听浏览器的网络事件,捕获请求和响应数据,最后将数据写入JSON文件持久化存储。

完整代码示例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
import json

# 初始化Chrome配置
chrome_options = webdriver.ChromeOptions()
# 可选:启用无头模式(无需可视化浏览器)
chrome_options.add_argument("--headless=new")
# 禁用不必要的扩展和通知,提升稳定性
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-notifications")

# 启动ChromeDriver(替换为你的chromedriver实际路径)
driver = webdriver.Chrome(
    service=Service("/path/to/chromedriver"),
    options=chrome_options
)

# 启用CDP网络监听
driver.execute_cdp_cmd("Network.enable", {})

# 存储捕获到的网络请求
network_logs = []

# 监听请求发送事件,提取关键信息
def log_request(request):
    # 可根据需求筛选请求类型,比如只保留XHR、Fetch
    if request["type"] in ["XHR", "Fetch"]:
        simplified_req = {
            "requestId": request["requestId"],
            "url": request["request"]["url"],
            "method": request["request"]["method"],
            "headers": request["request"]["headers"],
            "timestamp": request["timestamp"]
        }
        network_logs.append(simplified_req)

driver.add_cdp_listener("Network.requestWillBeSent", log_request)

# ---------------------- 执行你的测试流程 ----------------------
driver.get("https://your-test-url.com")
# 这里添加测试操作:点击按钮、提交表单等
# driver.find_element(By.ID, "submit-btn").click()
# -------------------------------------------------------------

# 等待所有请求完成(根据测试场景调整等待时间)
driver.implicitly_wait(5)

# 监听响应接收事件,补充响应数据
def log_response(response):
    # 匹配请求和响应
    for req in network_logs:
        if req["requestId"] == response["requestId"]:
            req["response_status"] = response["response"]["status"]
            req["response_headers"] = response["response"]["headers"]
            # 可选:获取响应体内容
            try:
                res_body = driver.execute_cdp_cmd(
                    "Network.getResponseBody",
                    {"requestId": response["requestId"]}
                )
                req["response_body"] = res_body.get("body")
            except Exception as e:
                req["response_body_error"] = str(e)
            break

driver.add_cdp_listener("Network.responseReceived", log_response)

# 等待响应处理完成
driver.implicitly_wait(3)

# 关闭网络监听
driver.execute_cdp_cmd("Network.disable", {})

# 将网络日志写入JSON文件
with open("selenium_network_logs.json", "w", encoding="utf-8") as f:
    json.dump(network_logs, f, indent=2, ensure_ascii=False)

# 关闭浏览器
driver.quit()

关键说明

  1. ChromeDriver版本匹配:确保ChromeDriver版本与本地Chrome浏览器版本一致,否则会出现兼容性问题。
  2. 请求筛选:可通过修改request["type"]的判断条件,只捕获特定类型的请求(如文档、图片、脚本等)。
  3. 响应体获取:部分请求(如已取消的请求、二进制文件)可能无法获取响应体,需添加异常处理避免报错。
  4. 持久化存储:生成的selenium_network_logs.json文件会保存在脚本运行目录下,浏览器关闭后可直接打开查看所有捕获的网络数据。

内容的提问来源于stack exchange,提问作者Mate Mrše

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:00:27