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

打开新标签页获取page_source异常:控制台输出首个标签页HTML

解决Selenium打开新标签页后获取到旧标签页page_source的问题

我碰到过好多次这个问题啦,核心原因很简单——Selenium不会自动帮你切换到新打开的标签页,它的焦点还停留在最初的那个页面上,所以你调用page_source拿到的自然是旧页面的内容。要解决这个,关键是手动切换到新标签页的窗口句柄,具体操作如下:

操作步骤

  • 第一步:获取当前浏览器所有窗口的句柄列表,每个标签页对应一个唯一的句柄
  • 第二步:切换到新打开的标签页(通常列表的最后一个元素就是最新打开的标签页)
  • 第三步:确认切换成功后,再调用page_source获取内容

代码示例(Python)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

# 初始化浏览器驱动
driver = webdriver.Chrome()

# 打开第一个页面
driver.get("https://www.example.com")
print("原标签页URL:", driver.current_url)

# 方式1:通过快捷键打开新标签页(也可以通过点击页面链接打开)
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')

# 获取所有窗口句柄
all_handles = driver.window_handles
print("当前所有窗口句柄:", all_handles)

# 切换到新标签页(最后一个元素是最新打开的)
driver.switch_to.window(all_handles[-1])

# 在新标签页打开目标页面
driver.get("https://www.google.com")

# 等待页面加载完成(根据实际情况调整等待时间,也可以用显式等待)
time.sleep(2)

# 验证是否切换成功
print("新标签页URL:", driver.current_url)

# 现在获取的就是新标签页的page_source了
new_page_source = driver.page_source
print(new_page_source[:500])  # 打印前500个字符验证

# 如果需要切回原标签页,用这个命令
# driver.switch_to.window(all_handles[0])

注意事项

  • 如果是通过点击页面链接打开新标签页,建议添加显式等待,确保新标签页完全加载后再获取句柄,避免列表未更新导致切换失败
  • 不要依赖固定的索引值(比如硬写[1]),因为窗口句柄是按打开顺序排列的,最新的永远是列表的最后一个元素[-1]
  • 可以通过driver.title或driver.current_url来验证是否成功切换到目标标签页

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:07:24