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)

关键点:

  1. 登录后先保存主窗口句柄
  2. driver.window_handles获取所有窗口
  3. 遍历找到新窗口并切换
  4. 操作完记得切回主窗口

有时候弹窗不是新窗口而是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 版本,多试几次

回到顶部