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

Selenium Chrome驱动关闭多窗口异常,剩余26个窗口未关闭如何解决?

问题根因
  • 核心错误是正向遍历动态变化的窗口句柄集合:每次调用Close()方法关闭窗口后,chrome.WindowHandles的长度会实时减1,集合内剩余元素的索引会统一前移一位,循环变量i自增后会直接跳过下一个待关闭的窗口,最终只关闭了约一半的目标窗口,和你剩余26个窗口的现象完全匹配。
  • 次要错误是循环终止条件写为i < chrome.WindowHandles.Count - 1,即使集合长度不变,该条件也会漏掉最后一个待关闭的窗口。
修复方案

你只需要提前将窗口句柄的快照存储到固定列表中,再遍历关闭即可,两种推荐写法如下:

写法1:反向遍历(最稳妥)

// 提前保存所有窗口句柄的快照,不受后续关闭操作影响
var allHandles = chrome.WindowHandles.ToList();
// 从最后一个窗口倒序关闭,跳过索引为0的初始窗口
for (int i = allHandles.Count - 1; i > 0; i--)
{
    chrome.SwitchTo().Window(allHandles[i]).Close();
}
MessageBox.Show(chrome.WindowHandles.Count.ToString());

写法2:正向遍历快照(更简洁)

var allHandles = chrome.WindowHandles.ToList();
// 跳过第一个初始窗口,关闭其余所有窗口
foreach (var handle in allHandles.Skip(1))
{
    chrome.SwitchTo().Window(handle).Close();
}
MessageBox.Show(chrome.WindowHandles.Count.ToString());

两种写法执行后都会仅保留最初的1个窗口,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:42:03