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

使用Python的Selenium点击PDF下载按钮失败,求排查解决

问题分析与解决方案

问题1:定位器语法错误

  • 使用By.ID定位元素时,代码中错误添加了CSS选择器的前缀#。ID定位只需传入纯ID值,正确写法应为driver.find_element(By.ID, 'icon')。但即使修正这个语法问题,也无法解决核心问题,因为浏览器PDF阅读器的元素不在网页DOM中。

问题2:浏览器原生PDF控件无法被Selenium定位

Chrome内置PDF阅读器的操作按钮(如下载按钮)属于浏览器原生UI组件,并不属于网页的DOM结构范畴。Selenium只能识别并操作网页DOM内的元素,因此无法通过常规的ID/CSS/XPath定位到这些按钮。

可行解决方案

方案1:直接下载PDF(推荐)

既然已获取PDF的直接URL,无需通过浏览器交互,使用Python的requests库直接下载更高效:

import requests

download_url = "https://www.npci.org.in/PDF/nach/circular/2015-16/Circular-No.135.pdf"
response = requests.get(download_url)
with open("Circular-No.135.pdf", "wb") as file:
    file.write(response.content)

方案2:配置Chrome自动下载PDF

通过Chrome选项配置,让PDF直接下载而非在浏览器中打开,避免操作阅读器控件:

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager

download_url = "https://www.npci.org.in/PDF/nach/circular/2015-16/Circular-No.135.pdf"

options = webdriver.ChromeOptions()
# 设置Chrome偏好,自动下载PDF
preferences = {
    "plugins.always_open_pdf_externally": True,
    "download.default_directory": "/your/local/download/path"  # 替换为你的本地下载路径
}
options.add_experimental_option("prefs", preferences)

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)
driver.get(download_url)

time.sleep(5)
driver.quit()

方案3:模拟键盘快捷键触发下载

若必须在PDF阅读器界面操作,可通过模拟Ctrl+S(Windows/Linux)或Cmd+S(Mac)快捷键触发下载:

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

download_url = "https://www.npci.org.in/PDF/nach/circular/2015-16/Circular-No.135.pdf"

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options)

driver.get(download_url)
time.sleep(3)  # 等待PDF完全加载

# 模拟Ctrl+S快捷键
driver.find_element(By.TAG_NAME, "body").send_keys(Keys.CONTROL, 's')
time.sleep(2)  # 等待保存对话框弹出,如需自动保存可额外配置Chrome下载设置

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:16:14