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

Selenium中driver.getCurrentUrl()获取PDF真实URL问题求助

解决Selenium获取PDF真实URL的问题

方法1:通过Chrome DevTools Protocol(CDP)获取真实URL

Chrome内置PDF查看器会通过扩展加载页面,但CDP可以绕过扩展层,拿到浏览器地址栏显示的实际导航URL。示例代码:

# 切换到新打开的PDF窗口
driver.switch_to.window(driver.window_handles[-1])
# 调用CDP获取导航历史记录
nav_info = driver.execute_cdp_cmd("Page.getNavigationHistory", {})
# 提取最新一条的真实URL
real_pdf_url = nav_info["entries"][-1]["url"]

核心是利用CDP直接读取浏览器的导航日志,不受扩展页面的URL干扰。

方法2:禁用Chrome内置PDF查看器

通过配置Chrome启动参数,让浏览器不使用扩展打开PDF,直接加载原始URL:

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 禁用PDF查看器扩展
chrome_options.add_argument("--disable-pdf-extension")
# 或者设置PDF直接用外部程序打开,避免扩展介入
chrome_options.add_experimental_option("prefs", {
    "plugins.always_open_pdf_externally": True
})

driver = webdriver.Chrome(options=chrome_options)

配置后,点击PDF链接时浏览器会直接加载原始URL,此时driver.getCurrentUrl()就能返回真实地址。

方法3:点击前直接提取链接的href属性

如果PDF链接是静态可定位的,在点击操作前直接获取链接地址是最简便的方式:

pdf_link = driver.find_element(By.LINK_TEXT, "目标PDF链接文本")
# 提前获取真实URL
real_pdf_url = pdf_link.get_attribute("href")
# 执行点击操作
pdf_link.click()

适合链接地址固定、不需要依赖页面跳转后状态的场景。

方法4:从扩展页面的存储中提取(特定场景适用)

部分PDF查看器扩展会将真实URL存在localStorage或sessionStorage中,可尝试读取:

driver.switch_to.window(driver.window_handles[-1])
# 执行JS读取存储中的URL
real_url = driver.execute_script("return window.localStorage.getItem('pdfUrl') || window.sessionStorage.getItem('pdfUrl');")

注意:该方法依赖扩展的具体实现逻辑,通用性较差,仅适合特定场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:05:57