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

Selenium Firefox:如何通过execute_script点击锚点实现PDF下载而非打开

实现Selenium+Firefox点击锚点直接下载PDF而非打开新标签

我用Python结合Selenium和Firefox开发了一个小型应用,需求是点击锚点元素时,将PDF文件下载到本地,而非在浏览器新标签页中打开。目前点击操作可正常执行,但3个PDF文件均在Firefox浏览器的新标签页中打开,请问如何修改实现PDF文件直接下载?

原代码如下:

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

URL="https://no.net.com/INFO/details.xhtml"

options = webdriver.FirefoxOptions()

service=webdriver.FirefoxService(executable_path='/.../geckodriver')

driver = webdriver.Firefox(options=options,service=service)

driver.get(URL)

objects = driver.find_elements(By.CSS_SELECTOR, "a > span.documents-text")

print(f"Array[{len(objects)}]") # gives 3

for o in objects:
   print(o.text)
   parent = o.find_element(By.XPATH, "./..") # this element is a anchor element
   try:
      # A strange div is hiding the element
      # parent.click()    # doesnt function
      # so I must run the following
      driver.execute_script("arguments[0].click();", parent)
   except:
      print("-- Click failed")
      raise

解决方法

核心是通过配置Firefox的首选项,让浏览器自动下载PDF而不是在标签页中打开,具体修改如下:

  1. 添加Firefox下载偏好配置
    在初始化FirefoxOptions时,加入以下配置项,指定下载目录并设置PDF自动下载:
options = webdriver.FirefoxOptions()

# 配置下载偏好
download_dir = "/你的本地下载路径"  # 替换成实际路径,比如Windows用"C:/Downloads",Linux用"/home/user/Downloads"
options.set_preference("browser.download.folderList", 2)  # 2表示自定义下载目录
options.set_preference("browser.download.dir", download_dir)
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")  # 指定PDF的MIME类型
options.set_preference("pdfjs.disabled", True)  # 禁用内置PDF阅读器
options.set_preference("plugin.scan.plid.all", False)
options.set_preference("plugin.scan.Acrobat", "99.0")
  1. 修改后的完整代码
    将上述配置替换原代码中的options = webdriver.FirefoxOptions()部分,完整代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

URL="https://no.net.com/INFO/details.xhtml"

options = webdriver.FirefoxOptions()

# 配置PDF自动下载
download_dir = "/你的本地下载路径"  # 替换为实际路径
options.set_preference("browser.download.folderList", 2)
options.set_preference("browser.download.dir", download_dir)
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/pdf")
options.set_preference("pdfjs.disabled", True)
options.set_preference("plugin.scan.plid.all", False)
options.set_preference("plugin.scan.Acrobat", "99.0")

service=webdriver.FirefoxService(executable_path='/.../geckodriver')

driver = webdriver.Firefox(options=options,service=service)

driver.get(URL)

objects = driver.find_elements(By.CSS_SELECTOR, "a > span.documents-text")

print(f"Array[{len(objects)}]") # gives 3

for o in objects:
   print(o.text)
   parent = o.find_element(By.XPATH, "./..") # this element is a anchor element
   try:
      # A strange div is hiding the element
      # parent.click()    # doesnt function
      # so I must run the following
      driver.execute_script("arguments[0].click();", parent)
   except:
      print("-- Click failed")
      raise

这样配置后,Firefox会自动将点击锚点对应的PDF文件下载到你指定的目录,而不会在新标签页打开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 23:13:12