一个基于 Chrome Manifest V3 的智慧树平台自动刷题浏览器扩展,采用模块化架构设计,支持智能答题、错题枚举、题库管理等功能。
- 自动答题:智能识别题型(单选/多选/判断),自动填写答案
- 题库记忆:基于
examId自动保存和加载历史答案 - 错题枚举:多选题答错时自动进行组合枚举(n选→n-1选→...→2选)
- 进度追踪:实时显示答题进度和枚举状态
- 多页面支持:
mastery页面:自动查找未完成题目pointOfMastery页面:检测完成度,自动返回exam页面:参数提取与自动答题examAnalysis页面:答案更新与错题处理
- 智能导航:100% 完成后自动返回,继续下一题目
- 断线重连:页面刷新后自动恢复状态
- 悬浮控制面板:可拖拽的浮动窗口,实时显示状态
- 一键操作:启动/停止、清空题库、查看当前状态
- 通知系统:彩色通知提示(成功/警告/错误)
- 深色模式适配:支持智慧树平台深色模式
ZhiHuiShu/
├── manifest.json # Manifest V3 配置文件
├── background/ # 后台服务
│ └── background.js # Service Worker,题库存储管理
├── content/ # 内容脚本(模块化架构)
│ ├── content-main.js # 主入口,页面监听与路由
│ ├── utils.js # 工具函数(页面类型判断等)
│ ├── interceptor.js # 网络请求拦截器
│ ├── page-interceptor.js # 页面数据拦截与解析
│ ├── page-handlers.js # 页面处理器(mastery/pointOfMastery)
│ ├── auto-answer.js # 自动答题核心逻辑
│ └── ui.js # 用户界面组件
├── popup/ # 弹出页面
│ ├── popup.html
│ ├── popup.css
│ └── popup.js
├── icons/ # 图标资源
└── data/ # 数据存储目录
-
下载或克隆本项目
git clone https://github.com/zjuatri/ZhiHuiShu.git
-
打开 Chrome/Edge 浏览器
-
访问扩展管理页面:
- Chrome:
chrome://extensions/ - Edge:
edge://extensions/
- Chrome:
-
开启右上角的 "开发者模式"
-
点击 "加载已解压的扩展程序"
-
选择项目根目录(包含
manifest.json的文件夹)
-
访问智慧树平台
- 支持域名:
studywisdomh5.zhihuishu.comfusioncourseh5.zhihuishu.com
- 支持域名:
-
启动自动刷题
- 在“掌握度”页面点击悬浮窗中的 "🚀 开始自动刷题" 按钮
- 如果未显示该按钮刷新页面即可
- 开启该插件进入智慧树课程页面可能触发警告,关闭插件,打开“掌握度”页面,刷新即可正常使用
-
查看进度
- 悬浮窗实时显示当前状态:
- 空闲中 / 自动答题中
- 当前答案、枚举进度
- 答题序号
- 悬浮窗实时显示当前状态:
-
清空题库
- 点击 "🗑️ 清空所有题库" 按钮
- 确认后清除所有已保存的答案数据
- Manifest V3:Chrome 扩展最新标准
- Vanilla JavaScript:无框架依赖,高性能
- Chrome Storage API:持久化题库数据
- Fetch/XHR Interception:网络请求拦截
- 页面类型识别与路由
- URL 变化监听(MutationObserver + popstate)
- 模块生命周期管理
isPageType(): 页面类型判断extractExamParams(): 考试参数提取showNotification(): 通知显示
- Fetch/XHR 请求拦截
- 题目数据提取(
getQuestionsAPI) - 答案数据提取(
getUserAnswersAPI)
findAndClickNextUncompleted(): 查找未完成题目(mastery)handlePointOfMasteryPage(): 处理进度检测(pointOfMastery)getNextEnumerationAnswer(): 错题枚举算法
startAutoAnswer(): 自动答题流程控制fillAnswerOnly(): 答案填写(支持单选/多选/判断)- 异步顺序点击(防止事件冲突)
- 答案验证与错误处理
- 悬浮窗创建与拖拽
- 状态显示更新
- 按钮事件绑定
- 题库数据存储(基于
examId) - 跨页面状态同步
- 消息通信处理
┌─────────────────────────────────────────────────────────────┐
│ 1. mastery 页面 │
│ - 查找未完成题目(custom-content div) │
│ - 点击按钮进入 pointOfMastery │
└─────────────────────┬───────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 2. pointOfMastery 页面 │
│ - 检测进度(charts-label-rate) │
│ - 100%: 点击返回 mastery,继续下一题 │
│ - <100%: 点击查看分析按钮进入 examAnalysis │
└─────────────────────┬───────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 3. examAnalysis 页面 │
│ - 拦截 getUserAnswers API 获取答案数据 │
│ - 更新题库(正确答案或错题枚举) │
│ - 刷新页面重新进入 exam │
└─────────────────────┬───────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 4. exam 页面 │
│ - 拦截 getQuestions API 获取题目 │
│ - 提取 examId 从题库加载答案 │
│ - 自动填写答案并提交 │
│ - 等待跳转到 examAnalysis │
└─────────────────────┬───────────────────────────────────────┘
↓
循环直至 100%
多选题答错时自动进行组合枚举:
// 示例:5 个选项的多选题
初始答案: [1, 2, 3, 4, 5] // 全选
第 1 次: [1, 2, 3, 4] // C(5,4) = 5 种组合
第 2 次: [1, 2, 3] // C(5,3) = 10 种组合
第 3 次: [1, 2] // C(5,2) = 10 种组合
...
直到找到正确答案- 标题栏:显示 "ATRI 刷题助手" + 当前状态指示灯
- 状态显示:
- 🔴 空闲中 / 🟢 自动答题中
- 当前答案数组
- 答题序号
- 操作按钮:
- 🚀 开始自动刷题(绿色渐变)
- ⏸️ 停止自动刷题(橙色渐变)
- 🗑️ 清空所有题库(红色渐变)
- 成功通知(绿色):答题完成、题库清空等
- 警告通知(橙色):页面检测、状态提醒等
- 错误通知(红色):元素未找到、操作失败等
{
questionId: "123456", // 题目ID
questionType: 1 | 2 | 14, // 1=单选, 2=多选, 14=判断
optionList: [...], // 选项列表
// ...
}{
examId: "exam_123", // 考试ID(题库键)
answerList: [
{
questionId: "123456",
answer: [1, 2, 3] // 统一数组格式
}
]
}所有关键操作都有详细日志输出(F12 控制台查看):
🔍查找操作✅成功操作❌失败/错误📊数据统计🔄流程状态⚠️警告提示
{
"exam_123": { // 键:examId
"123456": [1, 2], // 值:questionId -> answer
"123457": [1],
// ...
},
"exam_456": { ... }
}- 手动清除:点击悬浮窗 "清空所有题库" 按钮
- 编程清除:
chrome.storage.local.clear()
MIT License
zjuatri - GitHub
本项目仅供学习交流使用,请勿用于任何商业用途或违反平台规则的行为。使用本工具所产生的任何后果由使用者自行承担。
感谢所有为本项目提供建议和反馈的用户!
如有问题或建议,欢迎提交 Issue 或 Pull Request。