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
相关产品推荐
相关产品推荐

