Python中Selenium自动操作IE浏览器,登录后无法定位弹出窗口怎么办?
Selenium 自动操作 IE,在 IE 页面登录后,登录关闭当前页面 IE,弹出新的 ie 窗口,PYTHONE 无法找到弹出的窗口 报 NoSuchWindowException : Message : windows is closed
Python中Selenium自动操作IE浏览器,登录后无法定位弹出窗口怎么办?
5 回复
为什么要 IE~~形势所迫?
遇到Selenium操作IE时登录后无法定位弹出窗口的问题,通常是窗口句柄切换没做好。IE的弹窗有时会生成新窗口,你得先获取所有窗口句柄,再切换到新窗口去操作。
核心代码是这样的:
from selenium import webdriver
driver = webdriver.Ie()
driver.get("你的登录页面URL")
# 先完成登录操作
# ...你的登录代码...
# 获取当前所有窗口句柄
main_window = driver.current_window_handle
all_windows = driver.window_handles
# 切换到新窗口
for window in all_windows:
if window != main_window:
driver.switch_to.window(window)
break
# 现在可以在新窗口操作了
# ...你的弹窗操作代码...
# 操作完后切回主窗口
driver.switch_to.window(main_window)
关键点:
- 登录后先保存主窗口句柄
- 用
driver.window_handles获取所有窗口 - 遍历找到新窗口并切换
- 操作完记得切回主窗口
有时候弹窗不是新窗口而是iframe,那就需要用driver.switch_to.frame()来切换。还有种情况是弹窗有延迟,可以加个显式等待:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
建议先用开发者工具确认弹窗到底是新窗口还是iframe。
只能用 ie。内部系统。其他浏览器没办法正常显示。而且还只能是 IE8,ie 其他版本多少会有点问题。
心疼你
sele 版本,driver 版本,多试几次

