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

Python Selenium将下载文件保存到指定相对目录的问题求助

解决Selenium Chrome指定下载目录无效/弹出选择窗口的问题

我之前也踩过类似的坑,咱们先拆解问题根源,再一步步解决:

为什么之前的代码无效?

  • 相对路径不被支持:Chrome的download.default_directory只认绝对路径,你用的/folder是相对路径,Chrome根本找不到这个位置,自然不会生效。
  • Selenium版本兼容性问题:如果你的Selenium是4.x版本,旧代码里的chrome_options参数已经被弃用,得改用options参数传递给webdriver.Chrome()。
  • 缺少关键偏好设置:只设置下载目录还不够,有些场景下需要禁用弹窗提示、开启目录升级,否则Chrome还是会弹出选择窗口。

正确的设置步骤(分系统)

Windows系统

注意路径要用原始字符串(加r前缀),或者把反斜杠转成双反斜杠,同时补充必要的偏好设置:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
# 核心配置:禁用弹窗、指定绝对下载目录
prefs = {
    "profile.default_content_settings.popups": 0,
    "download.default_directory": r"C:\Users\user_dir\Desktop\your_target_folder",  # 绝对路径,结尾可加可不加斜杠
    "download.prompt_for_download": False,
    "directory_upgrade": True
}
chrome_options.add_experimental_option("prefs", prefs)

# Selenium 4+的标准写法(chromedriver路径可指定,或已配置到环境变量)
driver = webdriver.Chrome(options=chrome_options)

Linux/macOS系统

用正斜杠的绝对路径即可:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
prefs = {
    "profile.default_content_settings.popups": 0,
    "download.default_directory": "/home/your_username/your_target_folder",
    "download.prompt_for_download": False,
    "directory_upgrade": True
}
chrome_options.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(options=chrome_options)

针对特定文件类型的额外配置

如果下载PDF、ZIP这类容易触发Chrome内置预览/安全提示的文件,得加对应设置:

  • 下载PDF时,跳过预览直接下载:
prefs["plugins.always_open_pdf_externally"] = True
  • 下载压缩包时,禁止自动打开:
prefs["download.extensions_to_open"] = ""  # 不打开任何扩展名文件,直接下载

替代方案:监控下载目录获取刚下载的文件

如果还是有问题,或者你需要确认文件是否下载完成,可以用Python监控下载目录,抓取最新文件:

import os
import time

def get_latest_download(download_dir):
    # 列出目录下所有文件,过滤掉文件夹
    all_files = [os.path.join(download_dir, f) for f in os.listdir(download_dir)]
    file_list = [f for f in all_files if os.path.isfile(f)]
    # 按修改时间倒序,取最新的文件
    latest_file = max(file_list, key=os.path.getmtime)
    return latest_file

# 用法示例
download_dir = r"C:\Users\user_dir\Desktop\your_target_folder"
# 触发下载后,等待几秒让文件完成下载(时间根据文件大小调整)
time.sleep(5)
new_file = get_latest_download(download_dir)
print(f"刚下载的文件路径:{new_file}")

另外,如果你能拿到下载文件的直接URL,更推荐用requests库直接下载,比Selenium模拟下载高效得多:

import requests

file_url = "https://example.com/your_target_file.zip"
save_path = r"C:\Users\user_dir\Desktop\your_target_folder\file.zip"

response = requests.get(file_url)
with open(save_path, "wb") as f:
    f.write(response.content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:04:02