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

如何通过Selenium实现带重定向链接的文件下载?(附具体测试场景与配置问题)

解决Selenium中带重定向的文件下载问题

我来帮你搞定这个点击后先跳转再下载的棘手问题!这种场景确实容易让常规的下载配置失效,咱们分几个方案来解决,你可以根据实际情况选最适合的:

方案1:模拟完整用户操作(处理页面跳转+触发下载)

很多时候,点击目标链接会跳转到文件详情页,需要在新页面里再次点击下载按钮才能触发下载。这时候要处理窗口切换和元素等待:

步骤&代码示例

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

# 完善浏览器下载配置
options = webdriver.ChromeOptions()
options.add_experimental_option('prefs', {
    'credentials_enable_service': False,
    'profile.password_manager_enabled': False,
    'download.default_directory': '你的本地下载路径',  # 替换成你的实际路径
    'download.prompt_for_download': False,  # 禁止弹出下载确认框
    'download.directory_upgrade': True,  # 允许升级下载目录
    'safebrowsing.enabled': True  # 避免安全拦截自动下载
})

driver = webdriver.Chrome(options=options)
driver.get("https://www.foundationforintermediaries.co.uk/document-library/")

# 1. 点击目标文件链接前,保存当前窗口句柄
main_window = driver.current_window_handle

# 2. 定位并点击目标文件链接
target_link = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.LINK_TEXT, 'Buy To Let Individual Product Guide'))
)
target_link.click()

# 3. 等待新窗口/标签页打开,并切换过去
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
for handle in driver.window_handles:
    if handle != main_window:
        driver.switch_to.window(handle)
        break

# 4. 在新页面中定位下载按钮并点击(根据实际页面调整选择器)
download_btn = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//a[contains(text(), "Download") or contains(@href, ".pdf")]'))
)
download_btn.click()

# 5. 可选:等待下载完成(可以通过检查下载目录文件是否存在、大小是否稳定实现)

# 最后关闭窗口
driver.quit()

方案2:绕过跳转,直接获取真实下载链接(更高效)

如果不想处理页面跳转,可以直接找到文件的真实下载URL,跳过中间页面直接下载。步骤如下:

操作思路

  1. 先访问文档库页面,定位目标链接的跳转地址
  2. 打开跳转地址对应的页面,提取真实的下载链接
  3. 直接请求该链接完成下载(可以用Selenium或requests)

代码示例(结合requests复用会话)

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

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)
driver.get("https://www.foundationforintermediaries.co.uk/document-library/")

# 1. 获取目标链接的跳转地址
target_link = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.LINK_TEXT, 'Buy To Let Individual Product Guide'))
)
redirect_url = target_link.get_attribute('href')

# 2. 访问跳转页面,提取真实下载链接
driver.get(redirect_url)
download_url = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//a[contains(@href, ".pdf")]'))
).get_attribute('href')

# 3. 复用Selenium的会话(避免登录/权限问题),用requests下载
session = requests.Session()
for cookie in driver.get_cookies():
    session.cookies.set(cookie['name'], cookie['value'])

response = session.get(download_url)
with open('Buy_To_Let_Individual_Product_Guide.pdf', 'wb') as f:
    f.write(response.content)

driver.quit()

关键配置补充

你之前的配置缺少了几个关键项,导致可能无法自动下载:

  • download.prompt_for_download: 设置为False,禁止浏览器弹出下载确认框
  • download.directory_upgrade: 设置为True,确保下载目录生效
  • safebrowsing.enabled: 设置为True,避免浏览器因安全拦截阻止自动下载

这些已经加到方案1的配置里了,记得替换成你自己的本地下载路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:52:29