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
相关产品推荐
相关产品推荐

