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

Python Selenium Chromedriver点击新标签页后无法获取最新current_url

问题原因

你执行click()后代码会立刻向下执行,不会等待页面跳转完成,此时读取的driver.current_url自然还是跳转前的旧地址。

解决方案

方案1:显式等待URL变化(最适配你的需求)

使用Selenium自带的显式等待工具,等待URL发生变化后再读取地址,不会浪费多余等待时间,稳定性高。
首先导入依赖:

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

修改后的代码:

# 显式等待最大时长设为10秒,可根据页面加载速度自行调整
wait = WebDriverWait(driver, 10)
for i in range(25):
    # 先保存点击前的旧URL
    old_url = driver.current_url
    driver.find_element(By.XPATH, f'//*[@id="listing_{i}"]').click()
    # 等待URL不等于旧URL后再继续执行
    wait.until(EC.url_changes(old_url))
    print(driver.current_url)
    # 如果需要返回列表页继续点击下一个元素,这里记得加返回操作,比如driver.back(),再等列表页加载完成

方案2:等待跳转后页面的指定元素加载完成

如果你能确定跳转后页面存在某个唯一的定位元素,也可以等待该元素出现后再读取URL,适合后续还要对新页面做操作的场景:

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

wait = WebDriverWait(driver, 10)
for i in range(25):
    driver.find_element(By.XPATH, f'//*[@id="listing_{i}"]').click()
    # 替换成你跳转后页面的某个固定元素的定位
    wait.until(EC.presence_of_element_located((By.XPATH, '//*[@id="跳转后页面的元素ID"]')))
    print(driver.current_url)

特殊场景注意

如果点击后是打开新标签页而非当前页跳转,你还需要先切换到新标签页的句柄才能获取到新URL,示例如下:

for i in range(25):
    old_handles = driver.window_handles
    driver.find_element(By.XPATH, f'//*[@id="listing_{i}"]').click()
    # 等待新标签页出现
    WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) > len(old_handles))
    new_handle = [h for h in driver.window_handles if h not in old_handles][0]
    # 切换到新标签页
    driver.switch_to.window(new_handle)
    print(driver.current_url)
    # 用完记得关闭新标签页切回原列表页
    driver.close()
    driver.switch_to.window(old_handles[0])

不推荐直接使用time.sleep(n)强行等待,固定等待时长很容易出现等待不足还是取到旧地址、或者等待过长浪费时间的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:06:03