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

Edge WebDriver下载异常:如何解决.crdownload文件自动重命名问题?

问题描述

我正在编写Selenium脚本,通过点击按钮实现文件下载。我设置了4分钟的等待时长,但手动下载仅需不到1分钟。脚本执行完成后,下载的文件名仍带有.crdownload后缀。对比文件后发现似乎已下载完成,但该后缀存在未正确下载的风险。请问能否通过Selenium或Edge WebDriver实现下载完成后自动重命名文件?

相关代码片段

if EC.presence_of_element_located((By.ID,"btnExportExcel")):
    print("html element found")
    driver.find_element(By.ID,"btnExportExcel").click()
    time.sleep(480)

print("download is completed ")

(注:修正了原代码的大小写错误,符合Python语法规范)


解决方案

当然可以实现,核心思路是避免固定时长等待,动态监控下载文件状态,确认下载完成后再执行重命名操作。以下是具体实现步骤:

1. 配置Edge WebDriver的下载路径

先指定固定的下载目录,方便后续监控文件状态:

from selenium import webdriver
from selenium.webdriver.edge.options import Options
import os

# 设置自定义下载目录
download_dir = os.path.abspath("./downloads")
os.makedirs(download_dir, exist_ok=True)  # 目录不存在则创建

edge_options = Options()
# 配置下载偏好
prefs = {
    "download.default_directory": download_dir,
    "download.prompt_for_download": False,  # 禁止弹出下载确认框
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
edge_options.add_experimental_option("prefs", prefs)

# 初始化Edge驱动
driver = webdriver.Edge(options=edge_options)

2. 动态监控下载完成状态

点击下载按钮后,不要用time.sleep(),而是循环检查下载目录中的文件状态:

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

# 等待下载按钮出现并点击
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "btnExportExcel")))
driver.find_element(By.ID, "btnExportExcel").click()

# 定义等待下载完成的函数
def wait_for_download(download_dir, timeout=300):
    start_time = time.time()
    temp_file = None
    while time.time() - start_time < timeout:
        for filename in os.listdir(download_dir):
            # 识别临时下载文件
            if filename.endswith(".crdownload"):
                temp_file = filename
                time.sleep(2)
                break
            # 检查是否出现完成的文件(如果提前知道后缀,比如.xlsx,可以精准匹配)
            elif temp_file and filename == temp_file.replace(".crdownload", ""):
                return os.path.join(download_dir, filename)
        else:
            time.sleep(2)
    raise TimeoutError("下载超时未完成")

# 等待下载完成,获取最终文件路径
completed_file = wait_for_download(download_dir)

3. 自动重命名文件

确认下载完成后,直接用Python内置方法重命名:

# 设置新文件名
new_filename = "导出数据_最新版.xlsx"
new_file_path = os.path.join(download_dir, new_filename)

# 执行重命名
os.rename(completed_file, new_file_path)
print(f"文件已完成下载并重命名为:{new_filename}")

关键注意事项

  • 若无法提前知道下载文件的完整名称,可以通过临时文件名(去掉.crdownload后缀)匹配最终文件
  • 超时时间可根据实际下载速度调整,无需设置过长的固定等待时长
  • 确保下载目录无同名文件,避免重命名失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:40:19