前言
在日常学习中,我们经常需要从在线考试系统下载题库进行复习。然而,很多考试系统为了防止数据被爬取,采用了字体加密技术,将真实的题目内容替换为特殊字体字符,直接复制粘贴看到的是乱码。
今天,我将分享一个基于 Python 的考试题库自动化处理工具,能够突破字体加密保护,将加密的题目内容转换为可读格式。
项目简介
这是一个基于 Python 的考试题库自动化处理工具,专门用于从在线考试系统下载题库数据并解密其中的字体加密内容。该工具能够突破在线考试系统的字体反爬虫机制,将加密的题目内容转换为可读格式。
核心功能
- 🔍智能题库下载: 自动化从在线考试系统获取题目数据
- 🔓字体解密技术: 突破字体加密保护,还原真实题目内容
- 📊数据结构化: 将原始数据转换为结构化的 JSON 格式
- 🎨多平台支持: 支持 Windows 和 Linux 操作系统
- 🚀高效处理: 使用多线程和进度条提升用户体验
技术架构
技术栈
- 语言: Python 3.10+
- 核心库:
fonttools: 字体文件处理和分析requests: HTTP 请求处理beautifulsoup4: HTML 内容解析tqdm: 进度条显示hashlib: 字形哈希计算
核心模块
| 模块 | 功能 | 描述 |
|---|---|---|
app.py | 主程序入口 | 协调整个解密流程 |
FontDecryption.py | 字体解密引擎 | 字形哈希计算和映射构建 |
solutionData.py | 数据解析器 | 题目数据提取和格式化 |
fontDownload.py | 字体下载器 | 从远程服务器下载加密字体文件 |
使用方法
环境准备
克隆项目
gitclone https://github.com/happy-join-github/KaoShiBao.gitcdkaoshibao创建虚拟环境
python-mvenv .env激活虚拟环境
Windows:
.env\Scripts\Activate.ps1Linux/Mac:
source.env/bin/activate安装依赖
pipinstall-rrequirement.txt
数据获取步骤
手动登录系统
- 打开浏览器,访问考试系统官网
- 使用账号密码登录
注入 JavaScript 脚本
- 找到你要下载的题库,进入题库详情页面
- 按下 F12 打开开发者工具
- 在 Console 中输入以下代码:
constaxiosInstance=window.$nuxt.$axios;window.DecryptedQuestions=[];axiosInstance.interceptors.response.use(function(response){if(response.config&&response.config.url&&response.config.url.includes('/questions/ids')){console.log('%c=== 成功捕获解密后的明文数据 ===','color:white;background:#67c23a;font-size:16px;padding:10px;border-radius:5px;font-weight:bold;');if(Array.isArray(response.data.data)){window.DecryptedQuestions.push(response.data)}}returnresponse;},function(error){returnPromise.reject(error);});console.log("%c 注入完成",'color:white;background:#67c23a;font-size:16px;padding:10px;border-radius:5px;font-weight:bold;');获取题库数据
- 点击顺序/随机练习按钮(每次点击获取10道题)
- 重复点击直到获取足够数量的题目
- 在 Console 中输入:
copy(window.DecryptedQuestions) - 打开项目文件夹中的
title.json文件,粘贴数据
启动主程序
python app.py
输出结果
解密后的数据以结构化 JSON 格式保存:
{"question":"采切轻向上象方法进行软件开发时...","qtype":"1","options":[{"Key":"A","Value":"汽车和座位"},{"Key":"B","Value":"汽车和车窗"},{"Key":"C","Value":"汽车和发动机"},{"Key":"D","Value":"汽车和音乐系统"}],"answer":"D","analysis":"这道题考查面向对象方法中组成关系的理解...","decrypted_question":"采用面向对象方法进行软件开发时...","special_font":"k9fddb066cb69ed65a1c9dbcc23f75f09"}性能特点
- 高效解密: 基于字形哈希的快速映射算法
- 批量处理: 支持大量题目的并发解密
- 内存优化: 流式处理大数据文件
- 错误恢复: 完善的异常处理机制
项目结构
kaoshibao/ ├── app.py # 主程序入口 ├── requirement.txt # 依赖包列表 ├── utils/ # 工具模块 │ ├── FontDecryption.py # 字体解密核心算法 │ ├── solutionData.py # 数据解析处理 │ └── export.py # 数据导出工具 ├── fonts/ # 字体文件存储 │ ├── fontDownload.py # 字体下载器 │ ├── MSYH.TTC # 微软雅黑基准字体 │ └── msyh_glyph_hashes.json # 字形哈希映射表 ├── result/ # 处理结果输出 │ └── 20250601120000/ # 日期文件夹 │ ├── titleData_decrypted.json # 解密后的数据 │ └── questions.html # 可视化HTML文件 └── readme.md # 项目说明文档总结
本项目通过深入分析字体加密技术,实现了对在线考试系统题库的自动化解密。核心思想是利用字形哈希匹配来还原加密字符,这种方法具有通用性,可以应用于类似场景。
免责声明
⚠️重要提醒:
- 本代码仅用于参考和学习,造成的其他影响,与作者无关
- 本工具仅供学习和研究使用
- 请遵守相关法律法规和网站使用条款
- 作者不承担任何滥用责任
- 使用本工具产生的任何后果由用户自行承担
开源地址
如果这个项目对你有帮助,欢迎 Star 支持!
GitHub: https://github.com/happy-join-github/KaoShiBao
关于作者: Python 爱好者,专注于数据采集和自动化工具开发。如果你有更好的想法或建议,欢迎在评论区交流!