打开新标签页获取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
相关产品推荐
相关产品推荐

