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

如何用Python的Selenium/Chrome Driver切换浏览器窗口并交互?

Selenium窗口切换解决方案

解决这类弹窗窗口切换问题,核心是利用Selenium的**窗口句柄(Window Handles)**机制,具体实现步骤如下:

  • 保存原窗口句柄:点击弹窗按钮前,记录当前主窗口的句柄,为后续切回做准备。
  • 等待新窗口加载:点击按钮后,等待新窗口完全创建,避免因窗口未加载完成导致切换失败。
  • 切换至新弹窗:获取当前所有窗口的句柄集合,排除原窗口句柄,切换到新窗口。
  • 操作完成后切回原窗口:弹窗内操作结束后,通过保存的原句柄切回主窗口。

修改后的示例代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Chrome驱动
driver = webdriver.Chrome(service=s)
driver.get("https://originalwebsite.com/")

# 保存原窗口句柄
original_window = driver.current_window_handle

# 点击触发弹窗的按钮
driver.find_element(By.XPATH, 'buttons-xpath').click()

# 等待新窗口出现(最多等待10秒)
WebDriverWait(driver, 10).until(
    lambda d: len(d.window_handles) > 1
)

# 遍历所有窗口句柄,切换到新窗口
for handle in driver.window_handles:
    if handle != original_window:
        driver.switch_to.window(handle)
        break

# 在新窗口执行操作
driver.find_element(By.XPATH, 'button-on-new-website-xpath').click()
driver.find_element(By.XPATH, 'second-button-on-new-website-xpath').click()

# 切回原窗口(若弹窗操作后自动关闭,直接切换即可;若需手动关闭弹窗,先执行driver.close())
driver.switch_to.window(original_window)

关键说明

  • driver.navigate不适用于窗口切换:该方法仅用于当前窗口内的页面导航(前进、后退、刷新),和多窗口切换逻辑无关,因此无法解决你的问题。
  • 必须等待窗口加载:直接点击后切换可能因新窗口未完全创建导致报错,使用WebDriverWait监听窗口数量变化是更稳定的方式。
  • 多窗口场景适配:如果存在多个弹窗,可结合driver.title或driver.current_url进一步判断目标窗口(比如匹配主域名),确保切换到正确的窗口。

内容的提问来源于stack exchange,提问作者yuhnoodles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:45:42