使用Selenium下载PDF遇WebDriverException报错求解决
解决方案
方案1:正确配置Selenium CDP下载(Chrome)
问题核心是未通过Chrome DevTools Protocol(CDP)正确启用下载权限,且缺少下载路径的完整配置。修改后的代码如下:
import time import os from selenium import webdriver from selenium.webdriver.chrome.options import Options def download_pdf_and_rename(url, filename): # 替换为你的目标存储路径 MY_PATH = r"C:\Your\Download\Folder" # Windows示例 # MY_PATH = "/home/yourname/downloads" # Linux/macOS示例 chrome_options = Options() # 配置浏览器下载偏好:指定路径、禁用弹窗、直接下载PDF prefs = { "download.default_directory": MY_PATH, "download.prompt_for_download": False, "plugins.always_open_pdf_externally": True } chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("--enable-downloads") driver = webdriver.Chrome(options=chrome_options) # 通过CDP命令明确允许下载并指定路径(解决权限报错的关键) driver.execute_cdp_cmd("Browser.setDownloadBehavior", { "behavior": "allow", "downloadPath": MY_PATH }) driver.get(url) time.sleep(3) # 等待页面加载完成,可根据实际调整 # 等待文件下载完成(简单示例,可优化为循环检测文件存在) time.sleep(5) # AEA网站的PDF默认文件名如下,可根据实际目标网站调整 downloaded_file = os.path.join(MY_PATH, "doi.pdfplus.10.1257.aer.20170866.pdf") if os.path.exists(downloaded_file): os.rename(downloaded_file, os.path.join(MY_PATH, filename)) driver.quit() download_pdf_and_rename("https://pubs.aeaweb.org/doi/pdfplus/10.1257/aer.20170866", "my_pdf.pdf")
关键说明:
- 用
add_experimental_option配置下载路径和PDF处理规则,避免浏览器弹窗或在线打开PDF - 通过
Browser.setDownloadBehavior这个CDP命令明确授权下载,这是解决"You must enable downloads"错误的核心 - 原代码中
MY_PATH未定义,需替换为实际本地路径
方案2:直接用requests下载(更高效)
如果PDF URL可直接访问(无需登录或JS渲染),完全不需要Selenium,用requests库更简洁高效:
import os import requests def download_pdf_and_rename(url, filename): MY_PATH = r"C:\Your\Download\Folder" # 替换为你的路径 # 模拟浏览器请求头,避免被目标网站拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } # 流式下载大文件 response = requests.get(url, headers=headers, stream=True) response.raise_for_status() # 检查请求是否成功 with open(os.path.join(MY_PATH, filename), "wb") as f: for chunk in response.iter_content(chunk_size=8192): f.write(chunk) download_pdf_and_rename("https://pubs.aeaweb.org/doi/pdfplus/10.1257/aer.20170866", "my_pdf.pdf")
优势:
- 无需配置浏览器,代码更简洁
- 下载速度更快,资源占用更低
- 不会出现Selenium的浏览器权限类问题
内容的提问来源于stack exchange,提问作者Lucie Bois
相关产品推荐
相关产品推荐

