You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:15:08