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

如何使用Selenium从指定URL批量下载多页列表中的CSV文件

Selenium批量下载分页CSV文件实现方案

原代码核心问题

  • 未配置浏览器下载参数:默认会弹出下载确认窗口,且无法统一管理下载文件存储路径
  • 缺少显式等待逻辑:页面元素未加载完成就执行查找/点击操作,会频繁抛出元素不存在异常
  • 业务逻辑顺序颠倒:应在当前列表页完成所有文件下载触发后再执行翻页,而非提前跳转链接丢失列表上下文
  • 翻页逻辑无效:原代码未正确定位页码元素,page.click 缺少执行括号,也没有处理分页加载的等待
  • 硬编码页码上限不合理:固定循环100页会在总页数不足100时触发无效操作报错,没有自动终止判断

可直接运行的实现代码

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

# --------------- 配置项 ---------------
# 替换为你的chromedriver实际路径
CHROMEDRIVER_PATH = 'C:\\Utility\\chromedriver.exe'
# 替换为你想存储下载CSV的目标文件夹路径
DOWNLOAD_SAVE_PATH = 'C:\\Humana_CSV_Files'
# 单页操作后的等待时长(秒),网络差可以适当调大
OP_WAIT_TIME = 1
# 元素加载最大等待时长(秒)
ELEMENT_LOAD_TIMEOUT = 10
# --------------------------------------

# 配置Chrome自动下载参数
chrome_options = Options()
download_prefs = {
    "download.default_directory": DOWNLOAD_SAVE_PATH,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
chrome_options.add_experimental_option("prefs", download_prefs)

# 初始化浏览器
d = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=chrome_options)
wait = WebDriverWait(d, ELEMENT_LOAD_TIMEOUT)

try:
    d.get('https://developers.humana.com/Resource/PCTFilesList?fileType=innetwork')
    while True:
        # 等待当前页的文件列表加载完成
        wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'table.table a[href$=".csv"]')))
        # 获取当前页所有CSV下载链接
        csv_links = d.find_elements(By.CSS_SELECTOR, 'table.table a[href$=".csv"]')
        print(f"当前页找到{len(csv_links)}个CSV文件,开始触发下载")
        # 逐个点击触发下载
        for link in csv_links:
            link.click()
            time.sleep(0.2) # 短等待避免点击过快被拦截
        
        # 定位下一页按钮
        next_btn = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'li.page-item.next > a.page-link')))
        # 判断下一页按钮是否为禁用状态(即已经到最后一页)
        next_btn_parent = next_btn.find_element(By.XPATH, './..')
        if 'disabled' in next_btn_parent.get_attribute('class'):
            print("已到达最后一页,下载任务结束")
            break
        # 点击下一页,等待页面刷新
        next_btn.click()
        time.sleep(OP_WAIT_TIME)
finally:
    # 预留时间等待最后一批下载请求完成,可根据文件大小调整
    time.sleep(5)
    d.quit()

使用说明

  • 首次运行前先修改代码开头配置项里的CHROMEDRIVER_PATH和DOWNLOAD_SAVE_PATH为你本地的实际路径
  • 代码会自动识别分页,到最后一页时自动退出,不需要手动指定总页数
  • 如果运行中出现元素找不到的报错,可适当调大OP_WAIT_TIME和ELEMENT_LOAD_TIMEOUT参数
  • 若网站触发反爬拦截,可以在点击操作之间增加1-2秒的随机延时,降低操作频率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 23:57:18