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

如何用Selenium 4.3.0和.NET6.0捕获Web API POST请求体?

使用Selenium 4.3.0 + .NET 6.0捕获POST请求体与响应体的解决方案

Selenium 4.x的.NET版本对DevTools的API做了调整,旧的CreateDevToolsSession方法已被移除,你可以通过以下方式实现POST请求体和响应体的捕获:

核心实现步骤

  • 初始化ChromeDriver时启用DevTools支持
  • 订阅网络请求监听事件,过滤目标POST请求
  • 提取请求载荷与响应体
  • 和预期的tinyMCE生成HTML内容做对比验证

完整代码示例

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.DevTools;
using OpenQA.Selenium.DevTools.V114.Network; // 版本需与Chrome浏览器对应
using System.Text.Json;

// 初始化ChromeDriver
var options = new ChromeOptions();
// 可选:调试阶段禁用无头模式,生产环境可开启
// options.AddArgument("--headless=new");
var driver = new ChromeDriver(options);

// 获取并创建DevTools会话
var devTools = driver.DevTools;
await devTools.CreateSessionAsync(); // 异步方法需用await

// 启用网络监听
await devTools.Network.EnableAsync(new EnableCommandSettings());

// 存储捕获到的请求体和响应体
string capturedRequestBody = string.Empty;
string capturedResponseBody = string.Empty;

// 订阅请求事件,捕获POST请求体
devTools.Network.RequestWillBeSent += (sender, e) =>
{
    // 过滤目标请求,替换为你的实际请求URL特征
    if (e.Request.Method == "POST" && e.Request.Url.Contains("/send-email"))
    {
        if (e.Request.PostData != null)
        {
            capturedRequestBody = e.Request.PostData;
        }
    }
};

// 订阅响应事件,捕获响应体
devTools.Network.ResponseReceived += async (sender, e) =>
{
    // 匹配对应的请求
    if (e.Request.Method == "POST" && e.Request.Url.Contains("/send-email"))
    {
        var responseBody = await devTools.Network.GetResponseBodyAsync(new GetResponseBodyCommandSettings
        {
            RequestId = e.RequestId
        });
        capturedResponseBody = responseBody.Body;
    }
};

// 执行UI操作:操作tinyMCE并发送邮件
// 1. 切换到tinyMCE的iframe并编辑内容
driver.SwitchTo().Frame(driver.FindElement(By.CssSelector("iframe[title='Rich Text Area']"))); // 替换为你的tinyMCE iframe选择器
var editorBody = driver.FindElement(By.TagName("body"));
editorBody.SendKeys("one");
driver.SwitchTo().DefaultContent();
// 执行加粗操作(替换为实际页面的加粗按钮选择器)
driver.FindElement(By.CssSelector("button[aria-label='Bold']")).Click();

// 2. 点击发送邮件按钮
driver.FindElement(By.Id("send-email-btn")).Click(); // 替换为实际发送按钮ID

// 等待请求完成,根据实际场景调整等待时长
await Task.Delay(3000);

// 验证请求体内容
string expectedHtml = "<p><strong>one</strong></p>"; // 替换为你预期的tinyMCE生成HTML
if (capturedRequestBody.Contains(expectedHtml))
{
    Console.WriteLine("验证通过:tinyMCE格式符合预期");
}
else
{
    Console.WriteLine($"验证失败:预期内容「{expectedHtml}」,实际捕获「{capturedRequestBody}」");
}

// 清理资源
driver.Quit();

注意事项

  • 版本匹配:确保OpenQA.Selenium.DevTools的版本与你的Chrome浏览器版本一致,版本不匹配会导致API调用失败。
  • 异步处理:Selenium 4的DevTools API多为异步方法,必须使用await关键字处理。
  • 请求过滤:根据实际业务调整URL过滤规则,避免捕获无关请求。
  • iframe切换:操作tinyMCE时需先切换到对应的iframe,完成操作后切回主文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 07:33:20