Selenium关闭标签页后current_window_handle变为NoneType问题求助
问题原因
你触发报错的核心原因是:调用browser.close()只会关闭当前处于激活状态的标签页,但WebDriver不会自动把操作焦点切换到剩下的有效标签页,此时current_window_handle还停留在已经被销毁的句柄上,后续任何针对窗口的操作都会抛出NoSuchWindowException。
这是Selenium 3.x的通用设计逻辑,不属于环境Bug,多窗口操作场景中很常见。
修复方案
你只需要在关闭不需要的标签页后,手动调用switch_to.window()切换到剩下的有效句柄即可,修改后的参考代码如下:
from selenium import webdriver browser = webdriver.Chrome() browser.get('http://example.com') # 提前记录初始窗口的句柄备用 origin_window = browser.current_window_handle # 打开新标签页 browser.execute_script("window.open('');") window_id = browser.window_handles[-1] browser.switch_to.window(window_id) # 关闭当前不需要的新标签页 browser.close() # 手动切换回原来的有效窗口 browser.switch_to.window(origin_window) # 后续操作可正常执行 browser.get('https://google.ca')
如果不需要固定保留某个窗口,也可以直接从window_handles列表取有效值切换,不用提前记录初始句柄:
# 关闭当前窗口后直接切换到列表中第一个有效句柄 browser.switch_to.window(browser.window_handles[0])
补充说明
- 该逻辑在Selenium 4.x版本中也没有改动,多窗口操作关闭当前聚焦窗口后都需要手动切换焦点
- 关闭非当前激活的窗口不会触发这个问题
内容的提问来源于stack exchange,提问作者Daniel Moy
相关产品推荐
相关产品推荐

