import importlib
import subprocess
def import_module(module_name):
try:
return importlib.import_module(module_name)
except ImportError:
print(f"未找到模块 {module_name},正在安装...")
subprocess.check_call(["pip", "install", module_name])
return importlib.import_module(module_name)
# 导入所需的第三方库
base64 = import_module("base64")
hashlib = import_module("hashlib")
mimetypes = import_module("mimetypes")
os = import_module("os")
haralyzer = import_module("haralyzer")
def parse(har_path):
# 如果不存在 'res' 目录,则创建它
os.makedirs('res', exist_ok=True)
# 创建一个 MD5 哈希对象
hasher = hashlib.md5()
# 创建一个 HarParser 对象,并从文件中加载 HAR 数据
har_parser = haralyzer.HarParser.from_file(har_path)
# 遍历每个页面
for page in har_parser.pages:
# 获取页面的所有资源
entries = (page.audio_files + page.image_files)
# 遍历每个资源
for i in range(len(entries)):
entry = entries[i]
response = entry.get('response')
url = entry.url
if url and 'content' in response:
content = response.get('content')
text = content.get('text')
if text:
mime_type = content.get('mimeType')
encoding = content.get('encoding')
if encoding == 'base64':
# 如果是 base64 编码的文本,则解码为字节
text = base64.b64decode(text)
else:
# 否则,将文本编码为字节
text = text.encode()
# 根据 MIME 类型猜测文件扩展名
file_extension = mimetypes.guess_extension(mime_type)
if file_extension:
# 使用 URL 的哈希值作为文件名,并拼接文件扩展名
hasher.update(url.encode('utf-8'))
file_name = os.path.join('res', f'{hasher.hexdigest()}{file_extension}')
print(f'保存文件 {file_name}')
# 将字节写入文件
with open(file_name, 'wb') as f:
f.write(text)
if __name__ == '__main__':
# 遍历当前目录下的所有文件
for file_path in os.listdir(os.getcwd()):
# 如果文件扩展名是 '.har'
if os.path.splitext(file_path)[1] == '.har':
# 解析该 HAR 文件
parse(file_path)
break
print('执行结束')