使用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个关键问题:
- 未导入
os模块,运行会直接报错 download_dir变量未定义,需先明确指定路径(如默认下载路径r"C:\Users\MyUser\Downloads")- 无文件下载完成等待逻辑,直接遍历目录可能找不到文件,或文件仍在写入时重命名导致失败
修正后的移动文件代码(含等待逻辑)
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
相关产品推荐
相关产品推荐

