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

如何用Selenium在Chrome下载CSV并加载为Python DataFrame

问题解决方法

你现有代码仅完成了触发CSV下载的操作,补上下载路径配置、下载完成校验、文件读取三个环节即可直接拿到DataFrame对象,具体操作如下:

方案1:基于你现有Selenium代码修改(适配已有逻辑)

核心修改点

  • 启动Chrome时提前配置固定下载目录,关闭下载确认弹窗,避免找不到下载的文件
  • 点击下载按钮后增加等待逻辑,确认CSV文件完全下载完成再读取,避免读取到损坏的临时文件
  • 替换代码中已被新版Selenium废弃的find_element_by_xpath旧写法,兼容4.0+版本Selenium依赖

完整修改后代码

import os
import time
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

# 配置Chrome下载参数
download_dir = "C:/nlrb_case_data"  # 自定义文件存储的固定路径,可自行修改
os.makedirs(download_dir, exist_ok=True)
chrome_options = Options()
chrome_options.add_experimental_option("prefs", {
    "download.default_directory": download_dir,  # 指定默认下载路径
    "download.prompt_for_download": False,  # 禁止下载确认弹窗
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True  # 关闭安全拦截避免下载失败
})

# 启动浏览器
driver = webdriver.Chrome(
    executable_path="C:/Users/jmartinez/Downloads/chromedriver_win32 (2)/chromedriver.exe",
    options=chrome_options
)
driver.implicitly_wait(25)

# 打开目标页面
driver.get("https://www.nlrb.gov/search/case")

# 定位下载按钮点击
btn = driver.find_element(By.XPATH, "/html/body/div[1]/div/main/div[3]/div/article/div/div[3]/div/div[2]/div[2]/p[1]/a")
btn.click()

# 等待文件下载完成
csv_file_path = None
timeout = 60  # 最长等待60秒,可根据网速调整
start_time = time.time()
while time.time() - start_time < timeout:
    # 遍历下载目录找csv文件,排除Chrome未下载完成的.crdownload临时文件
    file_list = os.listdir(download_dir)
    csv_files = [f for f in file_list if f.endswith(".csv") and not f.endswith(".crdownload")]
    if csv_files:
        # 取最新生成的csv文件,避免目录下旧文件干扰
        csv_files = sorted(csv_files, key=lambda x: os.path.getmtime(os.path.join(download_dir, x)), reverse=True)
        csv_file_path = os.path.join(download_dir, csv_files[0])
        break
    time.sleep(1)

driver.quit()  # 下载完成可直接关闭浏览器

# 读取CSV为DataFrame,用utf-8-sig编码避免表头乱码
if csv_file_path and os.path.exists(csv_file_path):
    df = pd.read_csv(csv_file_path, encoding="utf-8-sig")
    print("CSV读取完成,数据维度:", df.shape)
    # 后续可直接对df对象做数据处理
else:
    raise Exception("CSV下载超时,未找到有效文件")

方案2:极简无浏览器方案(无需Selenium,效率更高)

该页面的CSV下载链接为公开直链,不需要模拟浏览器点击,直接用pandas即可读取远程CSV文件,省略本地下载步骤:

import pandas as pd
# 直接读取远程CSV,无需启动浏览器
df = pd.read_csv("https://www.nlrb.gov/case-search/export", encoding="utf-8-sig")
print(df.head())

注意:如果后续网站调整导出链接地址,只需要在页面上右键点击下载按钮,复制链接地址替换上述代码中的URL即可。


常见问题说明

  • 如果读取CSV出现乱码,可将encoding参数替换为latin-1重试
  • 如果下载等待超时,可将timeout参数调大,或检查网络是否能正常访问目标网站
  • Selenium 4.0+版本不需要手动指定executable_path,驱动会自动匹配本机Chrome版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:45:28