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

Python Selenium如何让Chrome driver在函数结束后保持运行以完成大文件下载

解决方案

核心思路是在所有触发下载的代码执行完成后,添加阻塞等待逻辑,确认所有文件下载完成后再结束函数、销毁Chrome driver,具体实现可选择以下方案:

  • 方案1:监控Chrome下载临时文件
    Chrome下载未完成的文件默认会带有.crdownload后缀,只需轮询检测下载目录下是否存在该后缀的文件,即可判断下载是否全部完成,适合同时下载多个文件、无法提前预知所有文件名的场景。
    实现代码如下:
import os
import time

def wait_for_all_downloads(download_dir, poll_interval=10):
    # 大文件可适当调大轮询间隔,减少不必要的IO操作
    while True:
        has_incomplete = any(file.endswith('.crdownload') for file in os.listdir(download_dir))
        if not has_incomplete:
            break
        time.sleep(poll_interval)

将上述函数集成到你的原有逻辑中:

def get_data(self,download_list,first_year,first_month,last_year,last_month):
    self.driver=super().get_chrome_drvier(download_path=self.download_path)
    self.driver.get(self.target_url)

    for ... in ...:
        for... in ...:
            download_file_code ....
    
    # 所有下载触发完成后,阻塞等待下载完成
    wait_for_all_downloads(self.download_path)
    # 确认下载完成后再关闭driver
    self.driver.quit()
  • 方案2:校验单个文件大小稳定性
    如果可提前获取待下载文件的文件名,可通过连续检测文件大小是否无变化判断下载完成,避免下载目录内其他无关临时文件造成干扰,也支持单文件下载完成后再触发下一个下载,避免带宽占满导致的下载失败。
    实现代码如下:
def wait_for_single_file(file_full_path, poll_interval=10, stable_times=3):
    prev_size = -1
    current_stable = 0
    # 连续3次检测文件大小无变化,判定为下载完成
    while current_stable < stable_times:
        if not os.path.exists(file_full_path):
            time.sleep(poll_interval)
            continue
        current_size = os.path.getsize(file_full_path)
        if current_size == prev_size:
            current_stable += 1
        else:
            current_stable = 0
            prev_size = current_size
        time.sleep(poll_interval)
  • 前置配置注意事项
    请确认初始化Chrome driver时已添加以下配置,避免下载弹窗、安全拦截等问题阻塞下载流程:
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
download_prefs = {
    "download.default_directory": self.download_path,
    "download.prompt_for_download": False, # 关闭下载确认弹窗
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True # 跳过安全校验,避免正规站点文件被误拦截
}
chrome_options.add_experimental_option("prefs", download_prefs)
# 若使用无头模式,需使用新版无头参数避免下载限制
chrome_options.add_argument("--headless=new")

内容的提问来源于stack exchange,提问作者석재현

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:15:00