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

C# Selenium3如何快速检测Chromium Edge浏览器是否已关闭?

C# Selenium3 快速检测Chromium Edge浏览器关闭的实现方案

问题根因

原有实现延迟高的核心原因是Selenium3默认的WebDriver命令超时为5秒,当浏览器关闭后,CurrentWindowHandle请求会等待到超时才抛出异常,所以会出现4秒以上的等待时间。

方案1:临时调整命令超时(改造成本最低)

该方案仅需调整原有判断逻辑,不需要额外引入其他依赖,检测耗时可降低到100ms以内:

public bool IsOpen
{
    get
    {
        if (_isDisposed || _webDriver == null) 
            return false;
            
        // 保存原有命令超时配置,避免影响后续Selenium操作
        var originalTimeout = _webDriver.Manage().Timeouts().CommandTimeout;
        try
        {
            // 临时将超时设置为100ms,大幅缩短等待时间
            _webDriver.Manage().Timeouts().CommandTimeout = TimeSpan.FromMilliseconds(100);
            _ = _webDriver.CurrentWindowHandle;
            return true;
        }
        catch
        {
            return false;
        }
        finally
        {
            // 无论检测是否成功,都恢复原有超时配置
            if (!_isDisposed && _webDriver != null)
            {
                _webDriver.Manage().Timeouts().CommandTimeout = originalTimeout;
            }
        }
    }
}

方案2:关联浏览器进程检测(延迟最低)

直接通过系统进程状态判断浏览器是否关闭,检测延迟几乎为0,适合对性能要求极高的场景:
首先在初始化WebDriver时记录你启动的Edge浏览器进程:

// 类成员变量,存储对应Edge浏览器进程
private Process _targetEdgeProcess;

// 初始化EdgeDriver时的逻辑
var preEdgeProcessIds = Process.GetProcessesByName("msedge")
    .Select(p => p.Id)
    .ToHashSet();
// 此处替换为你自己的EdgeDriver初始化逻辑
_webDriver = new EdgeDriver(yourEdgeOptions);
// 筛选出本次新启动的带主窗口的Edge进程
_targetEdgeProcess = Process.GetProcessesByName("msedge")
    .FirstOrDefault(p => !preEdgeProcessIds.Contains(p.Id) 
        && p.MainWindowHandle != IntPtr.Zero);

然后改写IsOpen属性:

public bool IsOpen
{
    get
    {
        if (_isDisposed || _webDriver == null || _targetEdgeProcess == null)
            return false;
        try
        {
            return !_targetEdgeProcess.HasExited;
        }
        catch
        {
            return false;
        }
    }
}

注意事项

  • 方案1的临时超时时间可根据设备性能调整,最低可设置为50ms,避免正常网络波动导致误判。
  • 方案2需注意如果用户同时手动打开了其他Edge窗口,需保证筛选进程逻辑的准确性,也可以通过Edge启动参数附加唯一标识来更精准匹配进程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 01:54:02