如何用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
相关产品推荐
相关产品推荐

