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

如何用Selenium 4(C#)结合Chrome DevTools模拟HTTP响应?遇Fetch问题

C# Selenium DevTools Fetch 完整实现示例

你提到的RequestPattern参数在C#的DevTools Fetch Enable配置里对应RequestPatterns属性(是一个集合),下面是包含请求过滤和requestPaused监听器的完整代码示例:

using OpenQA.Selenium;
using OpenQA.Selenium.DevTools;
using OpenQA.Selenium.DevTools.V108.Fetch;
using System.Collections.Generic;
using System.Threading.Tasks;

// 初始化DevTools会话
IDevTools devTools = driver as IDevTools;
DevToolsSession session = devTools.GetDevToolsSession();
var domains = session.GetVersionSpecificDomains<DevToolsSessionDomains>();

// 配置Fetch启用规则,设置RequestPatterns
var enableSettings = new EnableCommandSettings
{
    RequestPatterns = new List<RequestPattern>
    {
        new RequestPattern
        {
            UrlPattern = "*", // 匹配所有请求,可替换为具体URL规则
            ResourceType = ResourceType.Document, // 指定要拦截的资源类型,可选Script/Image等其他类型
            RequestStage = RequestStage.Request // 拦截时机,可选Request或Response阶段
        }
    }
};

await domains.Fetch.Enable(enableSettings);

// 添加requestPaused事件监听器
domains.Fetch.RequestPaused += async (sender, e) =>
{
    // 处理拦截到的请求,示例为打印请求URL后直接放行
    Console.WriteLine($"拦截到请求:{e.Request.Url}");

    // 放行请求,也可在这里修改请求头/体、伪造响应等
    await domains.Fetch.ContinueRequest(new ContinueRequestCommandSettings
    {
        RequestId = e.RequestId
    });
};

// 执行页面操作,比如导航到目标站点
driver.Navigate().GoToUrl("https://example.com");

// 使用完毕后禁用Fetch
await domains.Fetch.Disable();

关键说明:

  • RequestPatterns是集合类型,可添加多组规则实现精准拦截
  • 拦截的请求必须调用ContinueRequest/FulfillRequest/FailRequest处理,否则请求会处于挂起状态
  • 所有DevTools命令均为异步操作,需用await关键字处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:10:31