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

使用Selenium无法修改Chrome默认下载文件夹问题求助

Selenium下载文件无法指定目录的问题排查与解决

尝试了多种方案,但通过Selenium从网站下载的文件仍保存到默认Downloads文件夹,以下是我的代码设置:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import pyperclip

chrome_options = Options()
# Set download directory
chrome_options.add_experimental_option("prefs", {
    "download.default_directory": r"C:\Users\MyUser\Downloads\Selenium\\",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

# Create Chrome driver with options
webdriver.Chrome(options=chrome_options)

driver = webdriver.Chrome(executable_path="C:\\BrowserDrivers\\chromedriver.exe")
driver.maximize_window()

我还尝试了这段移动文件的代码:

# Find the downloaded file and move it to a different directory with a new name
for fname in os.listdir(download_dir):
    if fname.endswith('.xlsx'):
        src_path = os.path.join(download_dir, fname)
        dest_path = r'C:\Users\USERNAME\Documents\NewName.xlsx'
        os.rename(src_path, dest_path)
        break

问题1:下载目录设置不生效的核心原因

你创建了两次Chrome Driver实例:

  • 第一次调用webdriver.Chrome(options=chrome_options)时,已生成带配置的Driver,但未将实例赋值给变量,相当于无效创建
  • 第二次调用webdriver.Chrome(executable_path="...")时,生成了全新的、无任何下载配置的Driver,这才是实际运行的实例,导致之前的下载目录设置完全失效

修正后的初始化代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import pyperclip

chrome_options = Options()
chrome_options.add_experimental_option("prefs", {
    # 路径可使用原始字符串,末尾无需双斜杠,单斜杠即可
    "download.default_directory": r"C:\Users\MyUser\Downloads\Selenium",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

# 仅创建一次Driver,同时传入配置和驱动路径(若Selenium版本需指定)
driver = webdriver.Chrome(executable_path="C:\\BrowserDrivers\\chromedriver.exe", options=chrome_options)
driver.maximize_window()

问题2:移动文件代码的潜在缺陷

这段代码存在3个关键问题:

  1. 未导入os模块,运行会直接报错
  2. download_dir变量未定义,需先明确指定路径(如默认下载路径r"C:\Users\MyUser\Downloads")
  3. 无文件下载完成等待逻辑,直接遍历目录可能找不到文件,或文件仍在写入时重命名导致失败

修正后的移动文件代码(含等待逻辑)

import os
import time

def wait_for_download(download_dir, file_extension, timeout=60):
    start_time = time.time()
    while time.time() - start_time < timeout:
        for fname in os.listdir(download_dir):
            if fname.endswith(file_extension):
                file_path = os.path.join(download_dir, fname)
                # 等待文件大小稳定,避免文件未下载完成
                prev_size = -1
                while True:
                    current_size = os.path.getsize(file_path)
                    if current_size == prev_size:
                        return file_path
                    prev_size = current_size
                    time.sleep(1)
        time.sleep(1)
    raise TimeoutError("文件下载超时")

# 使用示例
download_dir = r"C:\Users\MyUser\Downloads"
dest_path = r"C:\Users\USERNAME\Documents\NewName.xlsx"

# 等待文件下载完成
src_path = wait_for_download(download_dir, ".xlsx")
# 重命名文件
os.rename(src_path, dest_path)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:15:27