一款面向公考备考的 Chrome 扩展工具,自动从粉笔模考页面提取完整试卷(题目/选项/解析/图片/材料),生成带 YAML Frontmatter 的结构化 Markdown 笔记,一键直存 Obsidian 知识库。
- 🎯 一键提取 — 自动采集完整试卷(题干、选项、答案、解析),支持懒加载滚动与材料页
- 🖼️ 图片支持 — 提取题干/选项/解析/材料图片,公式图片自动内联;可选 Base64 内嵌或保留 URL
- 📊 分数爬取 — 自动识别考试成绩(多策略兜底),可手动编辑
- 🏷️ 笔记属性面板 — 可编辑 title / date / source / tags / score,自动生成 YAML Frontmatter
- 📖 Obsidian 直存 — 三级降级:本地服务器直写 Vault →
obsidian://URI 剪贴板 → 本地下载 - 🔧 输出可配置 — 图片模式、材料开关、答案/解析开关、题目分隔符均可设置
- 下载最新的
mokao_vX.X.X.zip并解压 - 打开 Chrome,访问
chrome://extensions/ - 开启右上角 开发者模式
- 点击 加载已解压的扩展程序,选择解压后的文件夹
- 扩展图标出现在工具栏,安装完成
- 打开粉笔模考解析页 — 访问
spa.fenbi.com的模考解析(solution)或报告(report)页面 - 点击扩展图标 — 弹出 MoKao 面板,自动检测页面
- 点击「提取题目」 — 自动滚动加载并提取全部题目/材料/分数
- 编辑笔记属性 — 修改标题、标签、分数等(提取后自动展开)
- 保存 — 保存到 Obsidian(直存或剪贴板),或下载 Markdown 文件
扩展设置页(扩展图标 → ⚙️ 设置)包含两个 Tab:
- 通用设置 — 图片处理(Base64/URL/跳过)、题目分隔符、导出内容开关(统计/材料/我的答案/解析)
- Obsidian 直存 — 本地服务器配置(地址、Vault 路径、保存文件夹、文件名模板、启用开关)
mokao-chrome-extension/
├── manifest.json # 扩展配置(Manifest V3)
├── content.js # 页面注入脚本(DOM 提取逻辑)
├── popup.js # 弹窗交互逻辑
├── popup.html # 弹窗 UI
├── settings.html # 设置页面
├── settings.js # 设置逻辑(配置统一存 mokao_props)
├── mokao_obsidian_server.py # 可选:Obsidian 直存本地服务器
├── vault_config.json # 服务器配置文件(自动生成)
├── icon16.png / icon48.png / icon128.png
└── crawl-template.json # 爬取模板配置
默认无需后端,使用 obsidian:// URI + 剪贴板即可保存(需本机安装 Obsidian)。
如需服务器直写 Vault(不依赖 Obsidian 协议):
python mokao_obsidian_server.py --vault "你的Obsidian库路径"服务器只监听 localhost:8765,不暴露外网。首次运行会要求选择 Vault 目录,配置保存在 vault_config.json。
在设置页「Obsidian 直存」中勾选"启用直存"后,点「保存到 Obsidian」会先尝试服务器直存(文件直接写入 Vault,不占剪贴板、无大小限制);服务器离线或未设置 Vault 时自动降级为 obsidian:// URI 剪贴板方式。
- Manifest V3 — 符合 Chrome 最新扩展标准
- Content Script — 运行在粉笔页面上下文,自动复用浏览器登录态(Cookie)
- 选择器适配层 — content.js 顶部
SELECTORS常量集中管理全部 DOM 选择器,粉笔改版时单点维护 - 分数提取 — 三策略兜底:
/100兄弟节点 → "我的得分"容器 → 全文正则 - 设置持久化 — 统一存储在
localStorage['mokao_props'],设置页与弹窗共享
| 版本 | 变更 |
|---|---|
| v2.9.7 | 图片下载失败统计(记录失败数/HTTP状态/异常原因,日志可见) |
| v2.9.6 | 材料起始题号最终兜底:按"资料分析在试卷末尾、每组5题"推断,四川卷等无题号区间的材料正确挂接 |
| v2.9.5 | extract_materials 响应增加调试信息(题目数/首末题号/材料容器HTML) |
| v2.9.4 | 提取前轮询等待材料容器异步渲染(最多10秒);popup 材料为 0 时回退单独请求 |
| v2.9.3 | 材料随 extract 在同一 DOM 快照提取(避免虚拟滚动回收题目 DOM) |
| v2.9.2 | 材料起始题号双向推断(容器后第一题 / 容器前最后一题+1) |
| v2.9.1 | 修复图片下载被 CORS 拦截(manifest 增加 fb.fenbike.cn 权限);popup 默认图片模式改为 base64;修复资料分析材料未提取(支持独立容器 + 题目内嵌双结构) |
| v2.9.0 | 材料映射改为真实题号区间(DOM 解析,含兜底);提取进度实时反馈(已加载 X 题);移除 template.js 死代码 |
| v2.8.0 | 服务器直存落地:保存时自动检测本地服务器并直写 Vault,失败自动降级为 obsidian:// URI;版本号统一 |
| v2.7.0 | 简化设置页(移除无效模板编辑),统一配置存储 key,修复设置不生效;修复"掫取"错别字;材料图片 Base64 接回;分隔符/材料开关可配置;补齐发布包缺失文件 |
| v2.6.0 | 弹窗增加"刷新页面"按钮,页面检测逻辑重构 |
| v2.5.0 | 分数提取多策略重写(/100 兄弟 → 容器 → 正则兜底),附调试信息 |
| v2.4.0 | 属性面板 tags 手动编辑保护,分数识别失败告警 |
| v2.3.0 | 修复 tags 编辑 bug,新增 score 属性自动爬取 |
| v2.2.0 | 新增笔记属性面板(类似 Obsidian Web Clipper) |
| v2.1.0 | 自动提取试卷名称作为默认文件名 |
| v2.0.0 | 重构为剪贴板策略,移除 HTTP 服务器依赖 |
| v1.9.x | 早期版本,含本地服务器保存方案 |
MIT License
本工具仅供个人学习使用,请遵守粉笔网站的使用条款。提取的内容版权归原网站所有。