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

如何在Selenium 4 Python的第二个窗口中打开新标签并操作?

在Selenium 4 Python中给第二个窗口打开并操作新标签的解决方案

问题核心

你遇到的问题本质是未正确切换到目标窗口就执行操作,或未等待窗口句柄更新导致无法定位新标签。以下是两种可靠的解决方法:


方法1:使用Selenium原生API(推荐)

Selenium 4的switch_to.new_window('tab')会在当前活动窗口中创建新标签,所以前提是必须先切换到第二个窗口:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化浏览器,打开主窗口
driver = webdriver.Chrome()
driver.get("https://www.example.com")

# 打开第二个窗口,并等待句柄更新
driver.switch_to.new_window('window')
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
# 切换到第二个窗口(句柄列表索引1,主窗口是0)
second_window = driver.window_handles[1]
driver.switch_to.window(second_window)
# 给第二个窗口加载页面(可选但建议)
driver.get("https://www.example.org")

# 在第二个窗口中打开新标签
driver.switch_to.new_window('tab')
# 操作新标签
driver.get("https://www.google.com")

方法2:使用JavaScript打开并切换标签

如果必须用JS打开,关键是等待新句柄生成后切换到最新标签:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.example.com")

# 打开并切换到第二个窗口
driver.switch_to.new_window('window')
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
second_window = driver.window_handles[1]
driver.switch_to.window(second_window)
driver.get("https://www.example.org")

# 用JS在第二个窗口打开新标签
driver.execute_script('window.open("https://www.google.com","_blank");')
# 等待窗口数量增加到3(主窗口+第二个窗口+新标签)
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(3))
# 切换到最新打开的标签(句柄列表最后一个元素)
new_tab = driver.window_handles[-1]
driver.switch_to.window(new_tab)

# 验证操作:打印当前页面标题
print(driver.title)  # 输出 Google

关键注意事项

  • 操作窗口/标签前,必须通过switch_to.window()确认当前处于目标窗口,否则所有操作都会在之前的窗口执行。
  • 每次打开新窗口/标签后,用显式等待EC.number_of_windows_to_be()确保句柄更新,避免因页面加载延迟导致的句柄获取失败。
  • window_handles列表的顺序是窗口/标签打开的顺序,最新打开的会放在列表末尾。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 23:27:44