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

Selenium Python:循环打开新标签并关闭旧标签报错求助

解决Selenium打开新标签页并关闭旧标签页的报错问题

你遇到的no such window: target window already closed错误,核心问题是关闭当前窗口后没有切换到新打开的标签页,导致后续操作时driver找不到有效的窗口上下文。

你的代码逻辑存在两个关键问题:

  • 初始打开Chrome会生成一个空白窗口,第一次循环打开新标签后直接关闭这个空白窗口,但driver还绑定在已关闭的窗口上,后续执行window.open时就会报错。
  • 每次打开新标签后,没有切换到新标签页,关闭的始终是最初的窗口,完全不符合“打开新标签并关闭上一个”的需求。

修正后的代码

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

driver = webdriver.Chrome()
# 记录初始空白窗口的句柄
current_window = driver.current_window_handle

urls = ['https://google.com','https://facebook.com','https://instagram.com']

for url in urls:
    # 打开新标签页
    driver.execute_script(f"window.open('{url}');")
    # 等待新标签页加载完成,确保窗口句柄更新
    WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(len(driver.window_handles)+1))
    all_windows = driver.window_handles
    # 筛选出刚打开的新标签页句柄
    new_window = [window for window in all_windows if window != current_window][0]
    # 切换到新标签页
    driver.switch_to.window(new_window)
    # 关闭上一个标签页
    driver.close()
    # 更新当前窗口句柄,供下一次循环使用
    current_window = new_window

关键步骤说明

  • 用current_window持续记录当前活跃的窗口句柄,每次循环后更新,确保操作对象始终有效。
  • 加入WebDriverWait等待新标签页加载,避免因窗口句柄未同步导致的切换失败。
  • 切换到新标签页后再关闭旧窗口,保证driver始终绑定在存在的窗口上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:25:20