如何在Selenium WebDriver C#中捕获网络请求?
在Selenium C#测试中查看网络请求的方法
在Selenium 4及以上版本中,最直接的方式是利用**Chrome DevTools Protocol (CDP)**来捕获和查看网络请求/响应,以下是具体实现步骤:
1. 准备工作
确保项目引用了最新版的Selenium.WebDriver和Selenium.WebDriver.ChromeDriver NuGet包,且Chrome浏览器与ChromeDriver版本严格匹配。
2. 代码实现
引用必要命名空间
using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.DevTools; using OpenQA.Selenium.DevTools.V125.Network; // 版本需与Chrome浏览器一致
初始化Driver与DevTools会话
var chromeOptions = new ChromeOptions(); using var driver = new ChromeDriver(chromeOptions); // 获取DevTools实例并创建会话 var devTools = driver.GetDevTools(); await devTools.CreateSessionAsync();
启用网络监控并订阅事件
// 开启网络监听 await devTools.SendCommandAsync(new EnableCommandSettings()); // 监听请求发送事件 devTools.Network.RequestWillBeSent += (sender, args) => { Console.WriteLine($"[请求] URL: {args.Request.Url}"); Console.WriteLine($"[请求] 方法: {args.Request.Method}"); Console.WriteLine($"[请求] ID: {args.RequestId}\n"); }; // 监听响应接收事件 devTools.Network.ResponseReceived += (sender, args) => { Console.WriteLine($"[响应] URL: {args.Response.Url}"); Console.WriteLine($"[响应] 状态码: {args.Response.Status}"); Console.WriteLine($"[响应] ID: {args.RequestId}\n"); };
执行测试操作
// 访问目标页面,此时会触发网络事件 driver.Navigate().GoToUrl("https://example.com"); // 执行你的测试逻辑...
清理资源
// 关闭网络监听 await devTools.SendCommandAsync(new DisableCommandSettings()); // 关闭Driver实例 driver.Quit();
注意事项
- DevTools的版本命名空间(如
V125)必须与Chrome浏览器版本完全一致,否则会出现兼容性问题。可通过Chrome浏览器的「关于」页面查看版本号。 - 若使用Firefox浏览器,可通过
FirefoxDriver.GetDevTools()获取DevTools实例,操作逻辑与上述Chrome示例一致。
内容的提问来源于stack exchange,提问作者Denis Koreyba
相关产品推荐
相关产品推荐

