Python Selenium:循环中将文件下载至对应新建文件夹问题
解决Selenium指定文件夹下载文件的问题
原代码存在的问题
- 变量错误:代码中
Folder_names[i]的i未定义,应替换为循环变量j - 未配置下载路径:仅创建文件夹但未告知Selenium要将文件下载到该路径,文件仍会进入默认下载目录
- 文件夹创建无异常处理:若文件夹已存在,
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
相关产品推荐
相关产品推荐

