Files
huayi-question-bank/README.md
T

191 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 华谊题库助手
支持在普通 HTTP / HTTPS 网页中通过快捷键打开的本地题库油猴脚本:文字搜索、划词检索、自动选择已确认答案,并保留华谊练习平台的按库采集、CSV 导出与多题库导入。当前版本 **1.2.7**。
1.2.7 新增默认关闭的“补齐当前判断题库”。手动启动后会通过正常练习控件逐题作答,等待网站标准反馈与同题可信入库记录一致后再进入下一题;这会改变练习记录。只支持本站500题或232题的正常判断练习,不支持普通网页、正式考试或错题重做。该功能与普通自动选择互斥,详见下方使用说明。当前发布题库仍为1261题已确认、623题待补,功能发布不代表剩余答案已经采集完成。
**2026-10-30 答案来源更正:此前“1884题标准答案全部确认”的结论错误。** Chrome 实际练习和页面业务代码均证实,`/upm/start`、`/upm/wrong/start` 的未作答判断题也可能带有默认 `judgeAnswer: 0`,该值不能视为标准“错误”;旧值为 `1` 且没有提交或标准反馈证据时也不能确认。1.2.6 将这类旧判断题答案改为“待补”,清除仅由列表占位值及其继承 DOM 观察造成的冲突,并保留原值备份。两个可信标准答案不一致时仍保留冲突。
当前仓库保留五库 **1884个完整题目位置**,其中 **1261题答案已确认、623题待补、0题冲突**。已确认部分为单选500 + 401题、多选251题,以及1.2.6重新正常加载后取得可信标准的判断题库1共67题、判断题库2共42题。109道判断题均有非空已提交记录对应的 `submitted-list` 来源;题干和位置完整仍不代表答案完整。详情及初次隔离依据见 [`答案来源更正_20261030.json`](题库/答案来源更正_20261030.json)。
用户更新1.2.6后已在实际Chrome页面验证:判断题库1第67题的助手搜索答案“正确”与网页标准一致,未作答的第68题保持“待补”;重新进入两个判断练习后,分别恢复67、42道已有作答记录的可信标准答案。核验过程 **0次新提交,连续自动选择保持关闭**;判断题库2的42题是用户此前累计的已作答记录。本次恢复后,仓库题数仍为1884,未随浏览器历史缓存中的额外表示增长。
1.2.5 修复运行卡顿:题目与别名合并改为索引查找;无关计时器、答题卡选中样式和助手自身变化不再触发题目扫描;隐藏面板停止重建搜索及统计;重复浏览已保存题目跳过无效合并。题库保存按800ms合批并在浏览器空闲时执行,离开页面时立即写回;存储没有被其他标签页改变时直接保存已验证的内存记录,保留跨标签冲突、备份与迁移检查。
本版同时保留已复现的切题保护:题目ID、选项ID和输入控件实际值均参与身份核对,点击前后等待异步渲染稳定;上一题残留的答案反馈不再套用到新题。自动选择仍默认关闭。1.2.6 的题库答案来源更正与上述性能及切题保护一起生效。
1.2.4 在完整选项ID与正文映射一致时,可准确对应文字相同的不同选项;ID变化且文字有歧义时继续跳过。新增对旧版乘号、正负号实体记录的有证据补全,保留原始备份。缺少题目位置等依据的旧记录继续保留,五库题目集合按各库最新、题数与索引均已核验的完整题目批次整理;这里的完整仅指题干和位置,判断题答案来源另按1.2.6规则更正。
1.2.3 保留题干及选项中的图片地址,支持纯图片的化学结构式选项;修复多选题中多个正确选项文字相同而误报冲突的问题。只有部分同文选项正确、无法确定位置时仍跳过。图片题的答案继续按选项 ID 对应,CSV / JSON 保留图片来源地址;CSV 本身不嵌入图片像素。
1.2.2 修复了练习接口选择题选项正文使用 `itemContent` 时,单选和多选整题未被采集的问题;同时兼容原有 `content` 字段,标准答案继续按选项 ID 对应。更新脚本并刷新、重新进入练习后生效。
安装文件:[`dist/huayi-question-bank.user.js`](dist/huayi-question-bank.user.js)。这是构建后的完整脚本,无须安装 Node.js 或运行服务器。
五个题库于2026-10-29从Chrome导出,2026-10-30更正判断题答案来源并补入可信已提交列表后,仍保留 **1884题**。可使用 [`合并CSV`](题库/华谊集团化工总控工(高级)-合并题库.csv) 或 [`JSON备份`](题库/华谊集团化工总控工(高级)-合并题库.json);两份文件均明确保留623题待补状态。独立分库、31张原图和校验清单见 [`题库说明`](题库/README.md)。
## 安装与开始使用
1. 在浏览器中安装并启用 Tampermonkey(油猴)。
2. 打开油猴管理面板,选择“新建脚本”,将安装文件的全部内容粘贴进去并保存。
3. 打开或刷新普通网页,按 **Shift + Alt + Q** 显示题库助手,再按一次隐藏。每次加载页面都默认完全隐藏,无悬浮按钮;旧版保存的打开状态也会重置。
4. 在华谊练习页面,正常加载的题目会自动保存;只有取得可信提交记录或标准反馈时才保存已确认答案。安装后应重新进入练习,以便观察首次题目响应。普通网页只使用本地题库检索,不观察其网络请求或自动采集表单。
5. 在“文字搜索”中输入或粘贴至少两个字符,按回车或点“搜索”。也可以在页面划选题干后松开鼠标自动查询。
6. 在“题库 / 导出”中检查实际题库名、范围内题数及文件名预览,再导出 CSV 或备份 JSON。已识别的练习页默认当前题库;普通网页默认全部已存题库。
浏览器需允许油猴在相应网站运行用户脚本。更新到全网页版本后,浏览器可能需要重新授予网站访问权限。若快捷键没有显示面板,先确认扩展已启用且该站点有运行权限。浏览器内置页面、扩展商店及受限制页面不能运行普通用户脚本;本地文件取决于浏览器的文件访问设置,本版匹配普通 HTTP / HTTPS 页面。
## 紧凑白色面板与重复记录修复
面板宽度为 300px、最大高度为 440px;采用纯白背景、浅灰边框和灰色文字,缩减标题、按钮和卡片留白,内容在面板内滚动。快捷键及每页默认隐藏的行为保留,自动答题仍默认关闭。
平台每次进入同一练习可能生成新的一组题目 ID。旧版只按 ID 区分,会把三个 232 题加载批次存成 696 条。新版记录完整加载批次及批次内题目位置,并保留来源 ID 别名,使后续重复加载不再增加题数。
合并时核对题库、题型、题干和完整选项,同时保留原题库内合法的同文题。例如原库 232 题中有 3 对同文题,整理后仍为 232 个题目位置,不会压成 229。不同答案保留冲突;不同题库、不同选项不会混并。页面总数仅用于展示核对,不用于截断数据。
旧记录在加载、导入和导出前统一整理。首次整理前,原始数据会备份到本助手的独立存储项;在“设置”或油猴菜单中点击“导出整理前原始备份”可以取回。CSV / JSON 备份保留合并记录的来源 ID 别名、批次与位置字段。
1.2.3 只在全部冲突快照与正确ID、答案集合一致时恢复旧版重复选项文字造成的误报,并独立备份修复前记录。新完整批次与页面题数一致、题目位置、去图文字与答案均能唯一核对时,补全旧记录遗漏的图片,避免无图旧版和带图新版重复累计。“设置”和油猴菜单可分别导出误报修复前、图片补全前的原始备份;证据不足的记录继续保留。
## 自动答题
### 普通自动选择
普通自动选择模式只使用本地已确认答案。旧判断题库中未获可信反馈的题目显示“待补”,在此模式下跳过。已有候选结果与“当前题对应”分别展示;相似搜索结果或候选记录不能代替当前题的完整题干、选项及身份核对。
打开“自动答题”页签,先导入包含标准答案的题库,然后选择:
- **答当前题**:从本地已确认记录中精确匹配当前题干、题型和完整选项,自动选择正确选项。
- **连续自动选择**:仅在当前页面启用;题目变化后继续核对并选择。关闭后立即停止,刷新或打开其他网页后默认关闭。
单选按答案内容选择当前选项;多选同步完整正确集合,取消已经选中的错误项;判断题按“正确 / 错误”对应。候选答案冲突、题干或选项不完整、重复文字无法唯一对应、选项不可操作时跳过,显示原因。
普通自动选择完成后由你检查并提交或进入下一题;此模式不会点击提交、交卷或下一题按钮。华谊练习中的选项点击可能触发网站自身的作答响应,具体行为由练习页面决定。
自动选择支持华谊题目 DOM,以及标准 `fieldset + legend + label + radio/checkbox` 和明确题目容器结构。全网页显示不代表能自动识别任意网站的自定义答题控件;无法识别时可继续使用文字搜索。题库仍保存在同一个油猴脚本存储中,可在不同网站访问。
### 手动启动判断题库补齐
**“补齐当前判断题库”会真实进行正常练习作答,增加累计答题及对错记录。** 它默认关闭,不会因打开网页、导入题库或显示面板自动启动。请先打开本站500题或232题的正常判断练习,保持采集开启并等待当前题库身份及完整题目加载,再进入“自动答题”页签点击“补齐当前判断题库”。普通网页、正式考试和错题重做不能使用。
启动后从第1题逐题核对题库、位置、题目ID、完整题干和选项。已有可信标准答案的题目会跳过作答;待补题通过正常选项控件选择“正确”一次,以触发网站返回标准反馈。**这个选择只是取得反馈的练习作答,不能当作正确答案保存**;网站给出的标准可能是“正确”或“错误”。只有当前网页标准反馈与同题可信入库记录一致后,才点击正常“下一题”。身份、来源或答案不一致,或者反馈迟迟不到时停止,保留当前结果供核对。
可随时点击“停止补齐”。暂停采集、切换题库、离开页面、导入题库或发生存储异常时也会停止。隐藏或收起面板后仍会继续;隐藏后按 **Shift + Alt + Q** 恢复面板,收起后点击“展开”,再点击“停止补齐”。刷新后保持关闭,不会自动恢复。启动补齐会先停止普通自动选择,启用连续自动选择或点击“答当前题”也会先停止补齐,避免两种模式同时操作。
补齐模式会按上述核验结果点击“下一题”,但不会点击结束、交卷或末题提交按钮。只有全部标准题目位置均有可信答案时才显示完成;当前发布的623道待补题仍需实际取得网站反馈,不能由脚本版本号或进度推定已补齐。
## 本次方案:按题库分别统计、搜索和导出
旧版会累积的原因是:默认选择“全部题库”,主统计也是所有本地记录的总数,导出文件统一叫“华谊题库”。保存多个题库本身是正常行为,但当前库的展示与导出范围应该明确区分。
1. 识别当前选中的培训大纲条目、练习标题和任务 ID;接口提供的题库 ID 用于建立对应。切换期间旧题目与晚到响应保留原来源,不能套上新库名称。
2. 面板顶部始终显示当前实际题库名和本库题数。导出页默认“当前题库”;切换左侧题库后自动跟随,统计、CSV / JSON 内容和文件名预览一起更新。
3. 需要合并备份时,手动选择“全部题库”。题库总数与全部题数在“已保存题库”单独显示,各库名称和题数分别列出。
4. 文件名使用实际题库名称,例如 `华谊集团化工总控工(高级)-单选题库1_500题_20261029.csv`。Windows 不允许的文件名字符会替换成下划线;全部备份明确命名“全部题库”。
5. 对旧数据,只在正常响应重新确认了相同题库 ID 的准确名称时修正该 ID 的历史名称;不按题型或相同题干猜测其他题库的归属。
## 文字搜索
- 输入或粘贴完整题干、题干片段、选项内容或标准答案关键词,支持按钮、回车和输入后自动查询,也可点“清空”。
- “搜索题库”可选当前库、任意已保存库或全部库;已识别练习页默认当前库,普通网页默认全部库。搜索范围与导出范围独立,跨库查答案不会让导出自动变成全部。
- “搜索内容”可选全部文字、仅题干、仅选项、仅标准答案;多个关键词可用空格分隔,按同时包含处理。
- 结果标注命中题干、选项或答案,显示来源题库。只把已确认答案用于答案字段搜索,冲突和待补记录仍可通过题干找到。
- 每次最多展示 50 条结果,可细化关键词继续查找。
## 一次导入多个题库
点击“导入多个题库”,在文件选择器中用 Ctrl / Shift 同时选择多个 CSV 和 JSON。两种格式可以混选;文件中已有的题库名称、ID 和答案分别保留。单个合并备份文件也可包含多个题库。
没有来源题库名称的文件使用文件名(不含扩展名)作为名称。例如 `判断题库2.csv` 中没有来源列,导入后显示“判断题库2”。相同题目重复导入会合并,不同题库分别管理。若任一文件格式错误,本次整批不导入,并显示具体出错文件。
导入成功后可在“已保存题库”查看各库名称和题数,再在搜索 / 导出下拉框选择相应题库。导入不会改变页面当前正在练习的题库,也不会自动将导出范围切为全部。
## 隐藏、收起与恢复
| 操作 | 效果 | 恢复方式 |
| --- | --- | --- |
| 右上角“收起” | 只显示面板标题栏 | 点击“展开” |
| 打开或刷新网页 | 默认完全隐藏,无悬浮按钮 | **Shift + Alt + Q** |
| 右上角“隐藏” | 面板完全隐藏 | **Shift + Alt + Q** |
| **Shift + Alt + Q** | 在显示与隐藏之间切换 | 再按一次 |
| 油猴菜单“显示题库助手” | 手动显示面板 | 右上角隐藏或快捷键 |
复制开关等设置会保留;面板在每次加载后均重置为隐藏,连续自动选择和判断题补齐均关闭。隐藏时划选题干仍会更新查询,但不会重新弹出面板。隐藏面板不会停止当前页已开启的连续选择或判断题补齐;请恢复面板后关闭连续选择开关,或点击“停止补齐”。暂停采集会停止判断题补齐。
## 正确答案如何防止错位
- 保存标准答案的文字内容、正确选项 ID,以及同一条题目的完整选项。原始 A/B/C 字母仅供参考。
- 查到答案后,核验当前题干、题型和完整选项集合,再根据当前顺序显示字母。
- 例如采集时正确答案为 B“提高温度”,当前页面该内容移至 C,面板显示“提高温度;当前页面对应:C”。
- 多选题保存正确选项的完整集合;判断题保存“正确 / 错误”。
- 未取得标准答案时显示“待补”。学生选择、答题卡上的对错和题号不会被当作标准答案。
- 判断题列表的 `judgeAnswer` 值本身不构成标准答案证据。只有已提交列表、绑定到同题的作答回执、绑定当前题的标准反馈或明确标准答案源,才可恢复确认;分别保存为 `submitted-list`、`answer-response`、`bound-dom`、`explicit-standard`。
- 重复选项无法唯一对应、选项内容发生变化、同一题出现不同答案时,显示未确认或冲突,冲突内容保留在备份中。
升级1.2.6后,助手在读取、导入及合并旧记录时检查判断题答案来源。首次更正前将原值保存到独立备份;可在“设置”或油猴菜单中选择“导出判断题核验前备份”取回。备份失败时停止覆盖原库。已有可信作答回执或明确标准反馈可以恢复答案,未取得证据的题目继续待补。该备份独立于重复记录整理、重复选项误报和图片补全备份。
## CSV 与 JSON
CSV 使用 UTF-8 BOM,兼容 Excel 查看,支持中文、逗号、双引号及单元格换行。列包括:来源题库、题库 ID、题目 ID、题型、题干、各选项、正确答案内容、采集时答案字母、解析、答案状态、答案来源、采集时间和完整记录 JSON。
**助手导出的 CSV 含“完整记录JSON”列,回导时以该列为准。** 如果要在 Excel 中手工修改可读列并回导,请删除“完整记录JSON”整列,再导入;修改该列之外的展示文字不会改变完整记录。长数字 ID 和以公式字符开头的内容在可读列使用文本保护,原文保存在 JSON 中。
也可导入自己的标准 CSV。最小示例:
```csv
来源题库,题型,题干,选项A,选项B,正确答案内容,答案状态
示例题库,单选题,示例题干,选项一,选项二,选项二,已确认
示例题库,判断题,示例判断题,正确,错误,错误,已确认
```
“正确答案内容”填写完整答案文字。多选使用 JSON 字符串数组或在同一单元格中逐行填写完整选项,不能仅填写 A/B 字母。“我的答案”列不作为标准答案读取。建议直接以助手导出的表格作为模板。
JSON 备份包含 `schemaVersion: 1` 和 `records` 数组,保留完整选项标识、来源、答案、冲突和可选的 `answerEvidence` 证据字段;CSV的完整记录JSON列同样保留这些内容。两种格式均按题目合并,导入不会清空现有题库。导入旧版无证据网络判断题时仍会更正为待补;用户自行填写的标准CSV不因该旧网络规则被清空。每个文件限制 20 MB,每批文件合计限制 50 MB、50000 条记录。
## 采集范围与当前验证边界
脚本在当前账号正常练习时,观察已收到的题目 / 答案响应,并补充当前页面 DOM。普通自动选择只操作对应选项,网站可能按自身规则保存作答;手动启动的判断题补齐按上述流程进行正常练习及换题。接口没有提供标准答案时,保留待补状态;仅安装脚本不会凭空补出答案。
目前适配了保存页面中的真实题目结构,以及业务脚本中可确认的练习接口:`/upm/start`、`/upm/wrong/start`、`/pra/{id}/questions` 和对应单题作答结果。接口适配限制在本站及学习平台域名。脚本不发送题库到外部服务器,来源 URL 不保存查询参数。
原保存HTML用于结构适配,原始网页及资源文件不纳入仓库;浏览器测试使用脱敏的最小题目结构夹具。2026-10-29在实际登录的Chrome学习页面核对了五库题数:判断500/232题、单选500/401题、多选251题,合并文件的题数和完整位置仍成立。此前把判断题完整列表中的默认值认定为标准答案,已于2026-10-30更正,不能再据此声称旧完整批次包含全部标准答案。
实际Chrome核验的判断题库1第67题为“断续噪声与持续噪声相比,断续噪声对人体危害更大。”。只读查看已作答记录:提交答案为“错误”,网页标准答案为“正确”。初次隔离旧732道判断答案后,仅对这一题作明确人工标准核验,形成1153题已确认、731题待补的中间版本;该 `explicit-standard` 核验保留在更正历史中。用户更新1.2.6并重新正常加载练习后,109道已有作答判断题取得 `submitted-list` 标准,第67题的可信网络结果与人工核验一致,当前总数更新为1261已确认、623待补。剩余答案不根据旧0、1或常识猜测。核验前原值保留在本地 `.cache/` 和 Git 提交 `4bf2de1` 中。
本次Chrome判断题缓存仍显示判断1为502条、判断2为232条;判断1额外的2条是历史表示,不增加仓库题目位置。仓库按已核验的500、232个标准题目位置保存,五库仍为1884题。
题库保存在油猴脚本存储中,关闭面板、刷新或暂停采集不会清空。更换浏览器、卸载脚本或清理扩展数据前,请先导出 JSON 备份。
## 源码与验证
`题库/` 已保存经过答案来源更正的五库及合并结果。当前答案尚未补齐,使用已更正的分库文件合并时需显式允许待补:
```powershell
$bankCsvFiles = Get-ChildItem 题库/分题库 -Filter '*.csv' -File
npm run merge:banks -- --manifest 题库/页面题数核对.json --allow-partial --force $bankCsvFiles.FullName
```
页面清单格式为 `{"banks":[{"bankName":"完整题库名称","questionCount":500}, ...]}`,需要列出判断1、判断2、单选1、单选2和多选五个题库。合并前会核对缺库、缺答案和冲突,详情写入输出的 `题库清单.json`。当前 `questionsComplete: true`、`answersComplete: false`、`complete: false`;`--allow-partial` 仅允许输出如实标记待补的题库,不会把缺失答案变为已确认。不加该参数时应因答案未齐而失败。
五份历史原始CSV含1899条缓存记录,按题干和位置整理后为1884题,15条历史表示版本保留在原始下载中;来源哈希与排除标识记在 `导出批次核对.json`。该历史批次核对只能证明题数和位置,不能证明判断题答案可信。对旧 `exports/browser-20261029/*_v123.csv` 重新执行 `select:snapshots` 应因判断题缺少可信标准答案而失败;`--force` 不会跳过核验,也不能恢复缺失的证据。后续只有重新采集到充分可信答案的新完整批次才能通过严格选择。本地 `exports/` 和 `.cache/` 不上传仓库。
无需第三方前端依赖,源码分为:
- `src/core.js`:答案规范化、去重与冲突、检索、字母映射、CSV。
- `src/adapter.js`:本站响应观察、题目 DOM 读取、复制恢复。
- `src/autofill.js`:精确答案匹配、标准选项操作与连续选择。
- `src/collector.js`:手动启动当前判断练习的逐题作答、反馈核验、换题与停止。
- `src/app.js`:面板、隐藏恢复、存储、导入导出。
```powershell
npm run build
npm test
npm run check
```
真实浏览器测试使用 `npm run test:browser`,需要现有 Playwright 和 Chromium;可通过 `QB_PLAYWRIGHT_MODULE`、`QB_CHROMIUM_EXECUTABLE` 指定环境路径。测试固定读取 `tests/fixtures/question.html`,使用本地模拟接口,不需要原始保存网页或平台账号。构建、语法检查和核心单元测试只需 Node.js,无第三方依赖。
`npm run test:performance` 使用仓库真实1884题和本地最小练习页,对比固定的1.2.4提交与当前源码,不连接学习账号。实测助手根节点挂载约858→152ms,单次新题合并约916→32ms;无关计时器及答题卡变化造成的题目扫描76→0次,隐藏结果重建1→0次。以上为同机本地回归指标,不是平台整页加载时间。测试同时约束无关变化不写库、一次新题仅合并一次、隐藏面板不重建结果;详细结果与截图写入系统临时目录。
修改源码后执行 `npm run build`,再把新的 `dist/huayi-question-bank.user.js` 更新到油猴。