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

Python下载chromedriver zip文件损坏问题求助

解决requests下载ZIP文件损坏/不完整的问题

你的代码出现文件损坏的核心原因是:开启stream=True后直接读取response.content,这种方式在网络不稳定或文件较大时,无法保证完整读取流数据。以下是修复方案:

方案1:分块读取流写入文件

利用requests的iter_content()方法分块读取并写入文件,既适合大文件,也能提升下载可靠性:

import os
import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
url = 'https://storage.googleapis.com/chrome-for-testing-public/122.0.6261.69/win32/chromedriver_win32.zip'

# 发送请求并检查状态码
response = requests.get(url, stream=True, headers=headers)
response.raise_for_status()  # 捕获请求错误(如404、500等)

zip_filename = os.path.basename(url)
with open(zip_filename, 'wb') as zfile:
    # 按1MB分块读取,可根据需求调整chunk_size
    for chunk in response.iter_content(chunk_size=1024*1024):
        if chunk:
            zfile.write(chunk)

方案2:验证文件完整性

下载后可对比响应头中的Content-Length与本地文件大小,确认是否完整:

# 获取预期文件大小
expected_size = int(response.headers.get('Content-Length', 0))
# 获取本地文件实际大小
actual_size = os.path.getsize(zip_filename)

if actual_size == expected_size:
    print("文件下载完整")
else:
    print(f"文件不完整:预期{expected_size}字节,实际{actual_size}字节")

关键说明

  • stream=True模式下,response.content会尝试一次性将整个文件加载到内存,易受网络波动影响导致读取中断;iter_content()分块读取则能逐段写入,避免此类问题。
  • response.raise_for_status()可提前终止错误请求,避免将错误页面内容写入ZIP文件导致损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:52:16