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

Selenium点击target="_blank"链接后无法获取新页面URL,还有其他解决方法吗?

Selenium点击target="_blank"链接后获取新页面URL的解决方法

你遇到的问题本质是:target="_blank"会让链接在新标签页打开,但Selenium的WebDriver默认焦点仍停留在原窗口,所以直接调用current_url或page_source获取的还是原页面的内容,并非新打开的页面。

修改元素的target属性为_self确实能解决问题,但这绝对不是唯一的方法,下面给你另外两种更常用的处理方式:

方法一:切换到新打开的窗口

这是Selenium处理多窗口场景的标准操作,不需要修改页面元素:

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

# 先记录原窗口的句柄
original_window = driver.current_window_handle
# 点击带target="_blank"的链接
driver.find_element(By.XPATH, "//a[@target='_blank']").click()
# 等待新窗口加载完成,确保窗口数量变为2
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
# 遍历所有窗口句柄,切换到新窗口
for handle in driver.window_handles:
    if handle != original_window:
        driver.switch_to.window(handle)
        break
# 现在就能正常获取新页面的URL和源码了
current_url = driver.current_url
page_source = driver.page_source

# 后续如果需要回到原窗口,执行下面的代码即可
# driver.switch_to.window(original_window)

方法二:直接获取链接的href属性并访问

如果链接的href属性是直接可访问的地址,完全可以跳过点击操作,直接用driver.get()打开:

from selenium.webdriver.common.by import By

# 定位链接元素并获取href属性
link = driver.find_element(By.XPATH, "//a[@target='_blank']")
link_url = link.get_attribute('href')
# 直接访问该URL
driver.get(link_url)
# 此时就能获取当前页面的URL和源码
current_url = driver.current_url

三种方法各有适用场景:

  • 修改target属性:逻辑简单,无需处理多窗口,适合不想管理窗口句柄的场景。
  • 切换窗口:不修改页面结构,是处理多窗口的标准方案,适合页面元素无法修改的情况。
  • 直接访问href:避免了窗口切换和元素修改,适合链接地址明确可直接访问的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:01:09