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
相关产品推荐
相关产品推荐

