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

Python Selenium下载文件自动追加.part后缀问题求助

解决Selenium Firefox下载文件自动追加.part后缀的问题

我来帮你捋捋这个问题——.part后缀其实是Firefox在下载过程中使用的临时文件标识,只有当下载完全完成、文件彻底写入磁盘后才会自动移除。你遇到这个情况主要有两个核心原因,咱们一步步解决:

1. 固定等待时间不可靠,下载未完成就终止了

你现在用time.sleep(15)来等下载完成,但这个固定时间太死板了——一旦文件偏大或者网络波动,15秒根本不够,这时你提前调用driver.quit()会直接中断下载,导致.part文件保留甚至被删除(你备注里说quit后文件消失就是这个原因)。

替换固定sleep的方案:监听下载目录,等待.part文件消失或者目标文件出现。给你写个实用的监听函数:

import os
import time

def wait_for_download_completion(download_dir, expected_filename):
    # 循环监听,直到目标文件出现且临时.part文件消失
    while True:
        part_file_path = os.path.join(download_dir, f"{expected_filename}.part")
        target_file_path = os.path.join(download_dir, expected_filename)
        if os.path.exists(target_file_path) and not os.path.exists(part_file_path):
            break
        status_msg = "正在下载中..." if os.path.exists(part_file_path) else "等待文件开始下载..."
        print(status_msg)
        time.sleep(2)

之后在你的search()函数里,把time.sleep(15)替换成这个函数就行,记得传入你的下载目录和预期文件名。

2. 调整Firefox的下载偏好设置

你的Options里缺了几个关键配置,尤其是headless模式下的下载优化,以及防止Firefox提前清理临时文件的设置:

修改你的firefoxOptions()函数:

def firefoxOptions():
    options = Options()
    options.headless = True
    download_dir = "你的绝对下载路径"  # 这里一定要用绝对路径,避免Firefox识别出错
    options.set_preference("browser.download.folderList", 2)
    options.set_preference("browser.download.dir", download_dir)
    # 禁止弹出下载提示框
    options.set_preference("browser.download.manager.showWhenStarting", False)
    # 扩展支持的MIME类型,覆盖常见的CSV/Excel格式,根据你实际下载的文件调整
    options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/csv, text/csv, application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
    # 关键:关闭下载管理器退出时的自动清理,防止未完成文件被删除
    options.set_preference("browser.download.manager.cleanUpOnExit", False)
    # 适配headless模式的下载设置
    options.set_preference("browser.download.useDownloadDir", True)
    options.set_preference("dom.disable_open_during_load", False)
    return options

3. 最后调整你的search函数

把等待逻辑替换成咱们写的监听函数,确保下载完成再关闭浏览器:

def search():
    url = 'site_URL'
    download_dir = "你的绝对下载路径"  # 和firefoxOptions里的路径保持一致
    expected_filename = "你要下载的文件名.csv"  # 替换成实际文件名
    driver = webdriver.Firefox(options=firefoxOptions())
    driver.get(url)
    time.sleep(3) # 等待页面加载完成
    driver.find_element( By.CSS_SELECTOR, "css_selector_first_button").click()
    time.sleep(1)
    # 点击下载按钮
    driver.find_element(By.CSS_SELECTOR, "css_selector_second_button").click()
    # 等待下载完成
    wait_for_download_completion(download_dir, expected_filename)
    print("download complete!")
    driver.quit()

这样调整后,应该就能解决.part后缀的问题了——核心就是确保下载真正完成后再关闭浏览器,同时优化Firefox的下载配置适配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:42:46