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

