大理白族自治州网站建设_网站建设公司_轮播图_seo优化
2026/1/5 21:16:10 网站建设 项目流程

前言

在日常学习中,我们经常需要从在线考试系统下载题库进行复习。然而,很多考试系统为了防止数据被爬取,采用了字体加密技术,将真实的题目内容替换为特殊字体字符,直接复制粘贴看到的是乱码。

今天,我将分享一个基于 Python 的考试题库自动化处理工具,能够突破字体加密保护,将加密的题目内容转换为可读格式。

项目简介

这是一个基于 Python 的考试题库自动化处理工具,专门用于从在线考试系统下载题库数据并解密其中的字体加密内容。该工具能够突破在线考试系统的字体反爬虫机制,将加密的题目内容转换为可读格式。

核心功能

  • 🔍智能题库下载: 自动化从在线考试系统获取题目数据
  • 🔓字体解密技术: 突破字体加密保护,还原真实题目内容
  • 📊数据结构化: 将原始数据转换为结构化的 JSON 格式
  • 🎨多平台支持: 支持 Windows 和 Linux 操作系统
  • 🚀高效处理: 使用多线程和进度条提升用户体验

技术架构

技术栈

  • 语言: Python 3.10+
  • 核心库:
    • fonttools: 字体文件处理和分析
    • requests: HTTP 请求处理
    • beautifulsoup4: HTML 内容解析
    • tqdm: 进度条显示
    • hashlib: 字形哈希计算

核心模块

模块功能描述
app.py主程序入口协调整个解密流程
FontDecryption.py字体解密引擎字形哈希计算和映射构建
solutionData.py数据解析器题目数据提取和格式化
fontDownload.py字体下载器从远程服务器下载加密字体文件

使用方法

环境准备

  1. 克隆项目

    gitclone https://github.com/happy-join-github/KaoShiBao.gitcdkaoshibao
  2. 创建虚拟环境

    python-mvenv .env
  3. 激活虚拟环境

    Windows:

    .env\Scripts\Activate.ps1

    Linux/Mac:

    source.env/bin/activate
  4. 安装依赖

    pipinstall-rrequirement.txt

数据获取步骤

  1. 手动登录系统

    • 打开浏览器,访问考试系统官网
    • 使用账号密码登录
  2. 注入 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;');
  3. 获取题库数据

    • 点击顺序/随机练习按钮(每次点击获取10道题)
    • 重复点击直到获取足够数量的题目
    • 在 Console 中输入:copy(window.DecryptedQuestions)
    • 打开项目文件夹中的title.json文件,粘贴数据
  4. 启动主程序

    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 爱好者,专注于数据采集和自动化工具开发。如果你有更好的想法或建议,欢迎在评论区交流!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询