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

使用Selenium Python下载文件失败:代码正常运行但无文件下载

问题排查与修复方案

以下是导致文件无法下载的核心问题及对应修复:

1. 转义字符错误导致headless下载配置失效

enable_download_headless函数中使用了不必要的引号转义([\"send_command\"]和\"send_command\"),导致命令注册失败,headless模式下的下载行为设置未生效。

2. Headless模式缺少必要参数

部分Chrome版本在headless模式下必须添加--disable-gpu参数,才能正常启用下载功能。

3. 未确保下载目录存在

如果指定的下载目录C:/Users/USER/Desktop/Stats不存在,Chrome不会自动创建目录,直接导致下载失败。

4. 等待机制不够可靠

依赖time.sleep()可能导致元素未完全就绪就执行操作,建议用显式等待替代,提升稳定性。


修复后的完整代码

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import os

url = 'http://demo.automationtesting.in/FileDownload.html'
download_dir = 'C:/Users/USER/Desktop/Stats'

# 确保下载目录存在,不存在则创建
if not os.path.exists(download_dir):
    os.makedirs(download_dir)

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')  # 新增headless模式必要参数
options.add_experimental_option('prefs',{
    'download.default_directory': download_dir,
    'download.prompt_for_download': False,
    'safebrowsing_for_trusted_sources_enabled': False,
    'download.directory_upgrade': True,
    'safebrowsing.enabled': False
})

def enable_download_headless(browser, download_dir):
    # 移除不必要的引号转义
    browser.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
    params = {'cmd':'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_dir}}
    browser.execute("send_command", params)

browser = webdriver.Chrome(options=options)
enable_download_headless(browser, download_dir)

browser.get(url)

# 显式等待文本框加载完成
textbox = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.XPATH, '//*[@id="textbox"]'))
)
textbox.send_keys('Hello World')

# 点击创建文本按钮
create_btn = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="createTxt"]'))
)
create_btn.click()

# 等待下载链接生成并可点击
download_link = WebDriverWait(browser, 10).until(
    EC.element_to_be_clickable((By.XPATH, '//*[@id="link-to-download"]'))
)
download_link.click()

# 等待文件下载完成(可根据文件大小调整时长)
time.sleep(3)

browser.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:53:21