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

在C#环境下使用Selenium捕获API请求的指定请求头

解决方案:用Selenium 4+Chrome DevTools Protocol捕获请求头

Selenium原生没有GetNetworkRequests()这类方法,你之前的代码无法运行。针对.NET 6环境,推荐用**Chrome DevTools Protocol(CDP)**来监听网络请求,这是Selenium 4原生支持的方案,无需依赖BrowserMobProxy这类第三方工具。

实现步骤:

  • 初始化ChromeDriver时,创建CDP会话
  • 订阅Network.requestWillBeSent事件,该事件会在每个请求发送前触发,包含完整的请求头信息
  • 登录完成后,等待目标API请求出现,提取指定请求头

完整代码示例(.NET 6):

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.DevTools;
using OpenQA.Selenium.DevTools.V119.Network; // 版本需和你的Chrome版本匹配

class Program
{
    static void Main(string[] args)
    {
        ChromeOptions options = new ChromeOptions();
        options.AddArgument("user-data-dir=C:\\Users\\Test\\AppData\\Local\\Google\\Chrome\\User Data");

        using IWebDriver driver = new ChromeDriver(options);
        var devTools = driver as IDevTools;
        DevToolsSession session = devTools.GetDevToolsSession();

        // 启用Network域
        session.SendCommand(new EnableCommandSettings());

        // 存储目标请求的特定头信息
        string targetHeaderValue = null;
        string targetApiUrl = "https://test.com/api/your-target-endpoint"; // 替换为你的目标API

        // 订阅请求发送事件
        session.AddListener<RequestWillBeSentEvent>(e =>
        {
            if (e.Request.Url.Contains(targetApiUrl) && (e.Request.Method == "GET" || e.Request.Method == "POST"))
            {
                // 提取你需要的请求头,比如Authorization
                e.Request.Headers.TryGetValue("Authorization", out targetHeaderValue);
                // 如果需要多个头,可在此处继续处理
            }
        });

        // 导航到站点并完成登录(替换为你的实际登录逻辑)
        driver.Navigate().GoToUrl("https://test.com/");
        // driver.FindElement(By.Id("username")).SendKeys("your-username");
        // driver.FindElement(By.Id("password")).SendKeys("your-password");
        // driver.FindElement(By.Id("login-btn")).Click();

        // 等待目标请求触发,生产环境建议用WebDriverWait替代Thread.Sleep
        System.Threading.Thread.Sleep(10000);

        // 输出提取到的请求头
        if (!string.IsNullOrEmpty(targetHeaderValue))
        {
            Console.WriteLine($"目标API的指定请求头值:{targetHeaderValue}");
        }
        else
        {
            Console.WriteLine("未捕获到目标请求或请求头");
        }

        driver.Quit();
    }
}

注意事项:

  • 确保Selenium版本为4.x,ChromeDriver版本与本地Chrome浏览器版本匹配
  • Network命名空间的版本(如V119)需对应Chrome版本,可通过chrome://version查看浏览器版本
  • 替换targetApiUrl为你要捕获的API地址,以及要提取的请求头键名
  • 生产环境建议用WebDriverWait替代Thread.Sleep,根据页面加载状态或请求触发条件等待

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 23:30:17