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

使用Python Selenium避免同名PDF下载时被覆盖的解决方案

解决Selenium下载PDF时同名文件覆盖问题

核心方案

通过为每个待保存文件生成唯一文件名(如filename.pdf、filename(1).pdf),并在下载完成后重命名文件,彻底避免同名覆盖。

实现步骤

1. 生成唯一文件名的函数

该函数会检查目标目录中是否存在同名文件,若存在则自动添加递增序号,直到生成一个不存在的文件名:

def get_unique_filename(target_dir, original_filename):
    base_name, ext = os.path.splitext(original_filename)
    counter = 1
    new_filename = original_filename
    while os.path.exists(os.path.join(target_dir, new_filename)):
        new_filename = f"{base_name}({counter}){ext}"
        counter += 1
    return new_filename

2. 等待下载完成的辅助函数

Selenium无原生下载完成回调,通过监控Chrome下载临时文件(.crdownload后缀)判断下载状态:

def wait_for_download_complete(target_dir, timeout=60):
    start_time = time.time()
    while time.time() - start_time < timeout:
        pending_downloads = [f for f in os.listdir(target_dir) if f.endswith('.crdownload')]
        if not pending_downloads:
            return True
        time.sleep(1)
    print("下载超时")
    return False

3. 修改遍历下载逻辑

结合上述函数,在遍历DataFrame时处理每个文件的下载与重命名:

# 假设你的DataFrame包含'url'(PDF链接)和'filename'(目标文件名)两列
for index, row in df.iterrows():
    url = row['url']
    original_filename = row['filename']
    target_dir = file_path  # 对应你配置的下载目录

    # 生成唯一文件名
    unique_filename = get_unique_filename(target_dir, original_filename)

    # 访问链接并触发下载(根据页面实际逻辑调整,比如点击下载按钮)
    driver.get(url)
    # driver.find_element(By.XPATH, "//*[contains(text(),'下载')]").click()

    # 等待下载完成后重命名
    if wait_for_download_complete(target_dir):
        downloaded_path = os.path.join(target_dir, original_filename)
        if os.path.exists(downloaded_path):
            os.rename(downloaded_path, os.path.join(target_dir, unique_filename))
            print(f"已保存: {unique_filename}")
        else:
            print(f"未找到下载文件: {original_filename}")
    else:
        print(f"下载失败: {url}")

注意事项

  • 若服务器返回的文件名与DataFrame中存储的filename不一致,可通过对比下载前后的目录文件列表,找到最新下载的文件进行重命名。
  • 确保Chrome配置中download.default_directory指向正确的目标目录,无头模式下无弹窗干扰。

内容的提问来源于stack exchange,提问作者S Shekhar Mishra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:58:12