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

如何在Python Selenium中关闭广告标签页并解决NoSuchWindowException错误

问题原因
  • 报错核心是关闭所有广告标签页后,Selenium driver的操作焦点仍停留在最后一个被关闭的广告窗口上,没有切回初始的主窗口,后续调用driver.title时找不到有效窗口,因此抛出NoSuchWindowException。
  • 原有代码逻辑仅判断并关闭非主窗口,未在所有广告窗口处理完成后重置driver的操作上下文到主窗口,是触发报错的直接原因。
正确关闭广告标签页实现

基础版代码

# 记录主窗口句柄
main_window = driver.current_window_handle

# 遍历所有窗口,仅关闭非主窗口的广告页
for window in driver.window_handles:
    if window != main_window:
        driver.switch_to.window(window)
        driver.close()

# 关键步骤:所有广告页关闭后手动切回主窗口,重置driver操作上下文
driver.switch_to.window(main_window)

# 后续主窗口操作正常执行
print(driver.title)

优化版(适配频繁弹窗场景)

如果网站点击操作大概率触发广告弹窗,可以增加窗口数量变化判断,减少无效遍历:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 点击操作前先记录初始窗口数量
original_win_count = len(driver.window_handles)
# 执行目标点击操作
target_element.click()

# 最多等待3秒,判断是否有新窗口弹出
try:
    WebDriverWait(driver, 3).until(EC.number_of_windows_to_be(original_win_count + 1))
    # 有新弹窗时执行广告关闭逻辑
    for window in driver.window_handles:
        if window != main_window:
            driver.switch_to.window(window)
            driver.close()
    # 切回主窗口
    driver.switch_to.window(main_window)
except:
    # 无弹窗时直接跳过处理逻辑
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:00:04