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

Selenium在Linux环境可正常下载文件但Windows环境无法下载的问题排查及下载目录查询方法

我来帮你拆解这个跨平台的Selenium文件下载问题,以及对应的排查和解决办法:

问题原因分析

这个差异主要来自两个核心点:

  1. 平台默认下载路径差异:Linux下无头模式的ChromeDriver默认会将下载文件放到Python进程的当前工作目录;而Windows下(即使是无头模式),ChromeDriver默认会沿用Chrome浏览器的系统默认下载目录——也就是C:\Users\<你的用户名>\Downloads,这就是你找不到文件的关键原因。
  2. Selenium版本迭代的行为变化:从4.0.0到4.1.2的版本更新中,ChromeOptions对下载配置的隐含处理逻辑有调整,新版本对平台特定的默认行为区分更严格。
如何查询Selenium控制的Chrome实际下载目录

推荐两种可靠的查询方式:

方法1:通过Chrome DevTools协议(CDP)直接获取

这是最准确的方式,能直接从运行中的Chrome实例拿到生效的下载路径,不受平台和模式影响,代码示例:

# 在driver.get(url)之后添加这段代码
download_dir = driver.execute_cdp_cmd('Page.getDownloadBehavior', {})['downloadPath']
print(f"当前Chrome实例的下载目录: {download_dir}")

方法2:通过Chrome设置页面查询(仅适用于非无头模式)

如果是正常桌面模式的Chrome,可以直接读取设置里的下载路径,但无头模式下chrome://settings无法正常访问,所以仅作参考:

from selenium.webdriver.common.by import By

# 打开Chrome下载设置页
driver.get('chrome://settings/downloads')
# 等待页面加载后获取路径
download_path = driver.find_element(By.CSS_SELECTOR, '#downloadsLocation').get_attribute('value')
print(f"下载目录: {download_path}")
解决方案:手动指定统一下载目录

为了消除跨平台差异,最好手动指定固定的下载目录,让Windows和Linux的行为保持一致,代码示例:

import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

# 定义统一的下载目录(比如当前脚本所在目录的downloads文件夹)
download_dir = os.path.join(os.getcwd(), 'downloads')
os.makedirs(download_dir, exist_ok=True)  # 自动创建目录(如果不存在)

options = Options()
options.add_argument('--headless')

# 设置Chrome下载偏好
prefs = {
    "download.default_directory": download_dir,
    "download.prompt_for_download": False,  # 关闭下载弹窗
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
options.add_experimental_option("prefs", prefs)

# 初始化驱动
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get('https://home.treasury.gov/policy-issues/financing-the-government/interest-rate-statistics')

# 执行下载操作
nominal = driver.find_element(By.LINK_TEXT, 'DAILY TREASURY PAR YIELD CURVE RATES')
nominal.click()
dwnld = driver.find_element(By.LINK_TEXT, 'Download CSV')
dwnld.click()

# 验证下载结果(实际项目建议用显式等待替代sleep)
time.sleep(3)
if os.listdir(download_dir):
    print(f"文件已下载至: {download_dir}")
    print(f"下载文件列表: {os.listdir(download_dir)}")
else:
    print("未找到下载文件,请检查页面元素定位是否正确")

driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:12:45