Python/Selenium切换新窗口时driver.switch_to_window失效如何解决?
问题解决方法
- 你当前使用的
driver.switch_to_window()是Selenium已废弃的API,新版Selenium已不再支持该方法,需替换为driver.switch_to.window() - 直接传入固定字符串
"windowName"不符合实际场景,新弹出的窗口默认不会使用该名称,你需要通过窗口句柄来定位新打开的窗口 - 硬编码
time.sleep(2)稳定性差,可能出现窗口未完全加载就执行后续操作的情况
修复后的完整可运行代码如下:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By import time driver = webdriver.Chrome() driver.get("https:testpage.com/") # 记录原窗口句柄 original_window = driver.current_window_handle # 点击按钮触发新窗口弹出 driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/main/div/div/div/div[2]/ul/li[1]/button").click() # 等待新窗口出现,最多等10秒 WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2)) # 遍历所有窗口句柄,切换到新窗口 for window_handle in driver.window_handles: if window_handle != original_window: driver.switch_to.window(window_handle) break # 等待新窗口的accept按钮可点击后再点击 accept_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/div/div[2]/div/div[3]/button[2]")) ) accept_btn.click()
其他排查点
- 如果执行后依然无响应,检查新窗口内的目标按钮是否被包裹在
iframe标签内,如果是的话需要先调用driver.switch_to.frame()切换到对应iframe后再定位元素 - 尽量不要使用绝对路径写XPATH,优先通过元素的id、class、文本内容等特征定位,避免页面结构微调就导致定位失效
内容的提问来源于stack exchange,提问作者4non
相关产品推荐
相关产品推荐

