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

如何用Python解压JSON中Base64编码的压缩数据?

解决Selenium Grid文件下载的JSON封装压缩内容解析问题

在使用Selenium Grid做自动化测试时,文件下载的响应不会直接返回文件本身,而是把内容压缩后封装进JSON结构里。你拿到的响应数据如下:

b'{
"filename": "test.txt",
"contents": "UEsDBBQACAgIAFV1TlYAAAAAAAAAAAAAAAAIAAAAdGVzdC50eHQDAFBLBwgAAAAAAgAAAAAAAABQSwECFAAUAAgICABVdU5WAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAdGVzdC50eHRQSwUGAAAAAAEAAQA2AAAAOAAAAAAA"
}'

根据Selenium Grid官方文档说明:通过Grid下载文件时,文件内容会先被压缩为ZIP格式,再做Base64编码,最终封装到包含filename(原始文件名)和contents(Base64编码的ZIP数据)的JSON对象中返回。

以下是Python实现解析的步骤及代码:

处理流程

  • 将字节格式的响应数据转成字符串,再解析为JSON对象
  • 提取contents字段的Base64编码字符串,解码得到字节形式的ZIP压缩数据
  • 读取ZIP数据,提取目标文件的内容

完整代码示例

import json
import base64
from zipfile import ZipFile
from io import BytesIO

# 从Selenium Grid获取的响应字节数据
response_bytes = b'{  "filename": "test.txt",  "contents": "UEsDBBQACAgIAFV1TlYAAAAAAAAAAAAAAAAIAAAAdGVzdC50eHQDAFBLBwgAAAAAAgAAAAAAAABQSwECFAAUAAgICABVdU5WAAAAAAIAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAdGVzdC50eHRQSwUGAAAAAAEAAQA2AAAAOAAAAAAA"}'

# 1. 解析JSON响应
response_data = json.loads(response_bytes.decode('utf-8'))
contents_b64 = response_data['contents']
target_filename = response_data['filename']

# 2. Base64解码得到ZIP字节数据
zip_bytes = base64.b64decode(contents_b64)

# 3. 读取ZIP并提取目标文件内容
with ZipFile(BytesIO(zip_bytes)) as zip_file:
    if target_filename in zip_file.namelist():
        with zip_file.open(target_filename) as file:
            file_content = file.read().decode('utf-8')
            print(f"文件{target_filename}内容:")
            print(file_content)
    else:
        print(f"ZIP中未找到文件{target_filename}")

说明:代码用BytesIO把解码后的ZIP字节数据转为类文件对象,再通过zipfile.ZipFile读取内部文件。你的测试场景里test.txt是空文件,最终输出为空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 19:45:43