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

使用C#捕获Edge DevTools网络响应时遇WebSocket会话创建错误

解决Selenium 4.6.0中Edge DevTools会话创建失败的问题

问题重现

使用C# + .NET 6 + Selenium.WebDriver 4.6.0,在调用OpenQA.Selenium.DevTools.IDevToolsSession session = devTools.GetDevToolsSession();时,触发以下错误:

  • OpenQA.Selenium.WebDriverException: 'Unexpected error creating WebSocket DevTools session.'
  • NullReferenceException: Object reference not set to an instance of an object.

核心解决方案

1. 强制匹配Edge浏览器与EdgeDriver版本

Selenium 4.x自带的EdgeDriver版本必须和本地安装的Edge浏览器主版本完全一致(比如Edge 118.x对应EdgeDriver 118.x)。版本不匹配是触发WebSocket会话创建失败的最常见原因。

2. 正确初始化DevTools会话

不能直接调用GetDevToolsSession(),必须先通过CreateDevToolsSession()完成会话初始化,否则会返回null导致空引用异常。完整初始化代码如下:

using OpenQA.Selenium;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.DevTools;

// 初始化EdgeDriver
var edgeOptions = new EdgeOptions();
edgeOptions.AddArgument("--start-maximized");
IWebDriver driver = new EdgeDriver(edgeOptions);

// 转换为IDevTools接口
IDevTools devTools = driver as IDevTools;
if (devTools == null)
{
    throw new InvalidOperationException("当前EdgeDriver不支持DevTools协议");
}

// 先创建会话,再获取会话实例
devTools.CreateDevToolsSession();
IDevToolsSession session = devTools.GetDevToolsSession();

3. 完整捕获网络响应的示例代码

结合登录操作,监听网络响应的完整实现:

using OpenQA.Selenium.DevTools.V118.Network; // 注意版本要和Edge匹配

// 启用网络监听
await session.Network.Enable(new EnableCommandSettings());

// 绑定响应接收事件
session.Network.ResponseReceived += (sender, args) =>
{
    Console.WriteLine($"请求URL: {args.Response.Url}");
    Console.WriteLine($"状态码: {args.Response.Status}");
    Console.WriteLine($"响应类型: {args.Response.MimeType}");

    // 如需获取响应体,调用GetResponseBody方法
    var responseBodyTask = session.Network.GetResponseBody(new GetResponseBodyCommandSettings
    {
        RequestId = args.RequestId
    });
    responseBodyTask.Wait();
    Console.WriteLine($"响应体预览: {responseBodyTask.Result.Body.Substring(0, 500)}");
};

// 执行登录操作
driver.Navigate().GoToUrl("https://your-login-page.com");
driver.FindElement(By.Id("username")).SendKeys("your-username");
driver.FindElement(By.Id("password")).SendKeys("your-password");
driver.FindElement(By.Id("login-btn")).Click();

// 触发目标网络请求
driver.Navigate().GoToUrl("https://target-page.com");

// 等待请求完成
System.Threading.Thread.Sleep(8000);

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

4. 手动指定DevTools协议版本

如果自动匹配失败,可手动指定与Edge版本对应的协议版本:

var devToolsOptions = new DevToolsOptions();
devToolsOptions.BrowserVersion = "118"; // 替换为你的Edge浏览器版本
IDevToolsSession session = devTools.GetDevToolsSession(devToolsOptions);

空引用异常排查要点

  • 确认driver实例初始化成功,未抛出异常
  • 检查driver as IDevTools转换结果不为null,旧版EdgeDriver可能不支持DevTools协议
  • 必须在GetDevToolsSession()前调用CreateDevToolsSession()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:30:27