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

Python Selenium:循环中将文件下载至对应新建文件夹问题

解决Selenium指定文件夹下载文件的问题

原代码存在的问题

  1. 变量错误:代码中Folder_names[i]的i未定义,应替换为循环变量j
  2. 未配置下载路径:仅创建文件夹但未告知Selenium要将文件下载到该路径,文件仍会进入默认下载目录
  3. 文件夹创建无异常处理:若文件夹已存在,os.mkdir会抛出错误

方案一:直接配置浏览器下载路径(推荐)

通过ChromeOptions指定每个循环的目标下载文件夹,让文件直接下载到对应目录:

import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

Folder_names = ['Week1', 'Week2', 'Week3']
hyper_link_of_files = ['https://example.com/file1.pdf', 'https://example.com/file2.pdf', 'https://example.com/file3.pdf']  # 替换为实际链接

for j in range(len(Folder_names)):
    # 创建目标文件夹,已存在则跳过
    target_folder = os.path.join(os.getcwd(), Folder_names[j])
    os.makedirs(target_folder, exist_ok=True)
    
    # 配置Chrome下载偏好
    chrome_options = Options()
    prefs = {
        "download.default_directory": target_folder,
        "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)
    try:
        driver.get(hyper_link_of_files[j])
        # 等待文件下载完成,可根据文件大小调整等待时间,或用更精准的文件监听逻辑
        time.sleep(6)
    finally:
        driver.quit()

方案二:默认下载后移动文件

如果无法直接配置下载路径(如网站下载逻辑特殊),可先下载到默认目录,再移动到目标文件夹:

import os
import shutil
import time
from selenium import webdriver

Folder_names = ['Week1', 'Week2', 'Week3']
hyper_link_of_files = ['https://example.com/file1.pdf', 'https://example.com/file2.pdf', 'https://example.com/file3.pdf']
default_download_dir = os.path.expanduser("~/Downloads")  # 适配Windows/macOS/Linux的默认下载路径

for j in range(len(Folder_names)):
    target_folder = os.path.join(os.getcwd(), Folder_names[j])
    os.makedirs(target_folder, exist_ok=True)
    
    driver = webdriver.Chrome()
    try:
        # 记录下载前的文件列表
        pre_download_files = set(os.listdir(default_download_dir))
        # 触发下载
        driver.get(hyper_link_of_files[j])
        # 等待下载完成
        time.sleep(6)
        # 找出新增的下载文件
        post_download_files = set(os.listdir(default_download_dir))
        new_files = post_download_files - pre_download_files
        
        if new_files:
            downloaded_file = os.path.join(default_download_dir, new_files.pop())
            # 移动到目标文件夹
            shutil.move(downloaded_file, target_folder)
    finally:
        driver.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:10:39