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

如何用Requests下载需JS点击触发的CSV文件?

用Requests轻量下载BVMF的CSV文件

问题分析

你请求的接口https://bvmf.bmfbovespa.com.br/NegociosRealizados/Registro/DownloadArquivoDiretorio?data=返回的字符串是Base64编码的CSV内容——从页面的JS函数carregarDownloadArquivo里的convertBase64(t)就能看出,前端会把接口返回的Base64字符串解码后生成Blob文件完成下载。你的现有代码仅获取了编码后的内容,未做解码和保存操作,所以无法得到可用的CSV文件。

解决方案代码

直接用Requests请求接口,对返回的Base64字符串解码后保存为CSV即可,代码如下:

import requests
import base64

# 请求接口,添加User-Agent模拟浏览器避免被拦截
url = "https://bvmf.bmfbovespa.com.br/NegociosRealizados/Registro/DownloadArquivoDiretorio?data="
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers, allow_redirects=True)
# 解码Base64格式的返回内容
csv_content = base64.b64decode(response.text)
# 保存为CSV文件,文件名可参考前端逻辑自定义
with open("negocios_balcao.csv", "wb") as f:
    f.write(csv_content)

关键逻辑说明

  1. Base64解码:页面JS中的convertBase64函数就是执行Base64解码操作,对应Python里的base64.b64decode()方法。
  2. Headers设置:添加User-Agent是为了模拟浏览器请求,避免服务器拒绝无标识的请求。
  3. 文件保存:解码后的内容为二进制格式,需用wb模式写入文件,直接得到可正常打开的CSV。

方案选择建议

  • Requests方案远轻于Selenium:无需启动浏览器,资源占用小、速度快,适合批量或定时任务场景。
  • 仅当页面存在复杂动态渲染(如多层交互、极难逆向的JS加密)时,才考虑使用Selenium。此场景下Requests完全能满足需求,没必要用笨重的浏览器自动化工具。

前端代码逻辑拆解

你提取的JS函数核心流程为:

  1. 点击触发carregarDownloadArquivo,发起AJAX请求到你调用的接口。
  2. 接口返回Base64编码的CSV字符串。
  3. 调用convertBase64解码,生成Blob对象。
  4. 通过saveAs或IE专属方法将Blob下载为CSV文件。

我们用Python直接复现了「请求→解码→保存」核心步骤,跳过了前端浏览器渲染环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:25:25