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

Chrome无头模式下筛选指定时间内下载的Zip文件问题求助

问题解决:Headless Chrome适配 + 下载文件时间过滤

一、Headless Chrome适配处理

Headless模式下Chrome的下载行为和普通模式存在差异,固定时长的sleep等待不可靠,且需明确配置下载参数避免路径识别异常。初始化ChromeDriver时需添加以下关键配置:

  • 指定下载目录为系统Downloads文件夹
  • 禁用下载弹窗,自动完成下载
  • 补充headless模式必要的渲染参数(避免页面渲染异常导致下载触发失败)

二、100秒时间过滤逻辑

原代码会选取所有zip文件中最新的,完全忽略是否为本次下载的文件。通过文件修改时间戳,我们可以只筛选100秒内创建/修改的zip文件,再从中取最新的,彻底避免误选旧文件。


修改后的完整代码

import os
import time
from pathlib import Path
import zipfile
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options

# 初始化Chrome配置(适配Headless模式)
chrome_options = Options()
chrome_options.add_argument("--headless=new")  # 新版Headless兼容性更好
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--window-size=1920,1080")

# 设置自动下载参数
download_dir = str(Path.home() / "Downloads")
prefs = {
    "download.default_directory": download_dir,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
chrome_options.add_experimental_option("prefs", prefs)

driver = webdriver.Chrome(options=chrome_options)

# 触发下载操作
driver.find_element_by_xpath("//*[@id='downloadAction']").send_keys(Keys.ENTER)

# 智能等待下载完成(替代固定sleep,最多等待120秒)
wait_time = 0
max_wait = 120
target_files = []
while wait_time < max_wait:
    time.sleep(2)
    wait_time += 2
    # 筛选100秒内修改的zip文件
    current_time = time.time()
    target_files = [
        f for f in Path(download_dir).glob("*.zip")
        if (current_time - os.path.getmtime(f)) <= 100
    ]
    if target_files:
        break

# 处理下载结果
if not target_files:
    print("文件下载失败或超时")
    driver.quit()
else:
    # 选取最新的目标文件
    file = max(target_files, key=os.path.getmtime)
    print(f"找到目标文件:{file}")
    
    # 转移并解压文件
    dest_dir = Path.home() / "Desktop" / "BlueDart"
    dest_dir.mkdir(exist_ok=True)  # 简化目录创建逻辑
    
    with zipfile.ZipFile(file, "r") as zip_ref:
        zip_ref.extractall(dest_dir)
    
    os.remove(file)
    driver.quit()

关键改进点

  • Headless适配:使用新版--headless=new参数,配置明确的下载路径和自动下载偏好,避免弹窗和路径识别问题
  • 时间过滤:通过时间戳计算筛选出100秒内的文件,确保只处理本次下载的文件
  • 智能等待:替换固定sleep(10)为循环等待,直到找到目标文件或超时,可靠性更高
  • 代码优化:用Path的mkdir(exist_ok=True)简化目录判断,用with语句自动关闭zip文件,避免资源泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:20:46