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

使用Selenium Python下载CSV文件时得到不完整.tmp文件的问题求助

Selenium Python下载CSV生成不完整tmp文件的解决方案

核心根因:代码触发下载操作后未等待任务完成就终止运行,Chrome进程被强制销毁,未下载完成的临时文件无法转为完整CSV,是这类问题的高频诱因。

  • 方法1:补全Chrome下载配置项
    当前prefs配置缺少禁止下载弹窗、权限自动升级等必要配置,修改配置段如下:
prefs = {
    "download.default_directory": "你的下载目录路径",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": False,
    "profile.default_content_settings.popups": 0
}
  • 方法2:添加显式等待保证操作合法性
    避免元素未加载完成就触发点击导致请求异常,所有交互操作前添加显式等待:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver, 20)
# 等待登录按钮可点击
login_btn = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[normalize-space()="Login"]')))
login_btn.click()
# 等待协议同意按钮可点击
agree_btn = wait.until(EC.element_to_be_clickable((By.NAME, "agree")))
agree_btn.click()
# 等待下载按钮可点击
download_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Get the resource']")))
download_btn.click()
  • 方法3:添加下载完成轮询逻辑
    触发下载后轮询下载目录,直到临时文件消失、CSV文件大小稳定后再终止脚本,示例逻辑如下:
import os
import time

def wait_for_download_complete(download_dir, timeout=300):
    start_time = time.time()
    while True:
        tmp_files = [f for f in os.listdir(download_dir) if f.endswith('.tmp') or f.endswith('.crdownload')]
        csv_files = [f for f in os.listdir(download_dir) if f.endswith('.csv')]
        
        if not tmp_files and len(csv_files) > 0:
            # 校验文件大小1秒内无变化,避免写入未完成
            csv_path = os.path.join(download_dir, csv_files[0])
            size1 = os.path.getsize(csv_path)
            time.sleep(1)
            size2 = os.path.getsize(csv_path)
            if size1 == size2:
                return True
        
        if time.time() - start_time > timeout:
            raise TimeoutError("下载超时")
        time.sleep(2)

# 触发下载后调用即可
wait_for_download_complete("你的下载目录路径")
  • 方法4:使用requests携带Cookie下载(稳定性更高)
    避免浏览器下载的不稳定问题,获取登录态后直接用请求库下载文件:
import requests

# 同步Selenium的登录Cookie
cookies = driver.get_cookies()
session = requests.Session()
for cookie in cookies:
    session.cookies.set(cookie['name'], cookie['value'])

# 替换为实际的下载链接,可从下载按钮的href属性获取
download_url = "实际下载链接"
resp = session.get(download_url, stream=True)
with open("保存的CSV文件全路径", "wb") as f:
    for chunk in resp.iter_content(chunk_size=1024):
        if chunk:
            f.write(chunk)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 03:24:08