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

WebDriver能否拦截网络请求?启动网页时能否获取请求载荷?

WebDriver拦截网络请求与获取请求载荷的方案

核心结论

WebDriver本身没有原生的网络请求拦截能力,它的核心定位是模拟用户操作浏览器。但通过结合浏览器的调试协议(比如Chrome DevTools Protocol,CDP),完全可以实现拦截网络请求并获取请求载荷(Request Payload)的需求。

具体实现方法

主流做法是利用浏览器提供的调试协议,让WebDriver与浏览器建立调试通信,监听网络事件来捕获请求细节。

基于Chrome DevTools Protocol(CDP)的实操步骤

  1. 启动浏览器时开启调试模式,确保WebDriver能和CDP交互
  2. 启用网络监控功能,监听Network.requestWillBeSent事件——这个事件会在请求发送前触发,包含请求的URL、方法、头信息,以及POST/PUT请求的postData(即请求载荷)
  3. 若遇到大体积或流式传输的请求载荷,可能需要调用Network.getResponseBody接口来获取完整内容

Python示例(Selenium + CDP)

from selenium import webdriver
from selenium.webdriver.chrome.service import Service

# 初始化Chrome浏览器
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=Service(), options=options)
cdp = driver.execute_cdp_cmd

# 开启网络监控
cdp("Network.enable", {})

# 定义请求捕获的回调函数
def catch_request_details(payload):
    req = payload["request"]
    # 只关注带请求体的POST/PUT请求
    if req["method"] in ("POST", "PUT"):
        print(f"请求地址: {req['url']}")
        print(f"请求方法: {req['method']}")
        # 打印请求载荷
        if "postData" in req:
            print(f"请求载荷: {req['postData']}\n")

# 绑定监听事件
driver.add_cdp_listener("Network.requestWillBeSent", catch_request_details)

# 访问目标页面,触发请求
driver.get("https://your-target-site.com")

# 执行操作(比如点击按钮提交表单)
# driver.find_element(By.ID, "submit-btn").click()

# 关闭监控和浏览器
cdp("Network.disable", {})
driver.quit()

其他浏览器的适配

  • Firefox:通过geckodriver配合Firefox的远程调试协议,逻辑和Chrome一致
  • Edge:基于Chromium内核,直接复用Chrome的CDP方案即可

注意要点

  • 浏览器和WebDriver的版本要匹配,避免调试协议版本不兼容
  • 针对加密的请求载荷,需要根据实际编码格式(比如Base64)做解码处理
  • 持续监听网络事件会增加浏览器负载,建议只在需要监控的阶段启用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:05:34