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

如何利用Selenium实现为每个下载任务创建以sid命名的专属文件夹

解决方案

我来帮你搞定这个需求!要实现每次点击下载后把文件存到对应sid命名的专属文件夹里,我们需要补充文件夹创建、下载状态校验和文件移动的逻辑。以下是修改后的完整代码,我会逐一拆解关键部分:

import os
import shutil
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

# 配置Chrome的下载参数,指定临时下载目录
temp_download_dir = "./temp_downloads"
os.makedirs(temp_download_dir, exist_ok=True)

chrome_options = Options()
chrome_options.add_experimental_option("prefs", {
    "download.default_directory": os.path.abspath(temp_download_dir),
    "download.prompt_for_download": False,  # 关闭下载弹窗提示
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

# 初始化浏览器驱动
driver = webdriver.Chrome(options=chrome_options)

for i in range(81, 100):
    sid = str(i)
    target_folder = f"./sid_{sid}"
    # 创建当前sid对应的文件夹,已存在则跳过创建
    os.makedirs(target_folder, exist_ok=True)
    
    try:
        # 访问目标页面(如果你的代码已经在对应页面,可忽略这一行)
        driver.get(f"url.com/test?sid={sid}")
        
        # 点击导出Excel按钮
        driver.find_element(By.XPATH,'/html/body/center/form/table/tbody/tr[2]/td[2]/table/tbody/tr[6]/td/table[2]/tbody/tr/td/a[2]').click()
        
        # 等待文件下载完成(替代单纯sleep,更可靠)
        def wait_download_finish(temp_dir):
            while True:
                # 过滤掉隐藏文件和临时下载文件
                all_files = [f for f in os.listdir(temp_dir) if not (f.startswith('.') or f.endswith('.crdownload'))]
                if all_files:
                    # 返回最新创建的文件(即刚下载的文件)
                    return max(all_files, key=lambda x: os.path.getctime(os.path.join(temp_dir, x)))
                time.sleep(1)
        
        # 获取刚下载完成的文件路径
        downloaded_file = wait_download_finish(temp_download_dir)
        src_file_path = os.path.join(temp_download_dir, downloaded_file)
        dest_file_path = os.path.join(target_folder, downloaded_file)
        
        # 移动文件到对应sid的文件夹
        shutil.move(src_file_path, dest_file_path)
        print(f"sid={sid}的文件已成功保存到 {target_folder}")
        
    except Exception as e:
        print(f"处理sid={sid}时出错: {e}")
        continue

# 关闭浏览器
driver.quit()

# 可选:清理临时下载文件夹
shutil.rmtree(temp_download_dir)

关键细节解释:

  • 临时下载目录:单独指定一个临时文件夹存放所有下载文件,避免和其他下载内容混淆,方便精准定位当前sid的下载文件。
  • 目标文件夹创建:用os.makedirs(..., exist_ok=True)确保每个sid都有专属文件夹,即使文件夹已存在也不会报错中断循环。
  • 下载完成校验:替代固定时长的time.sleep,通过检查临时目录中是否存在未完成的下载文件(带.crdownload后缀),确保文件真正下载完成后再移动,避免文件损坏。
  • 文件移动逻辑:找到临时目录中最新创建的文件,移动到对应sid的文件夹,保证每个sid的文件不会混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:17:29