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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:35:57