# 华谊题库助手 支持在普通 HTTP / HTTPS 网页及获准访问的本地 HTML 文件中通过快捷键打开的本地题库油猴脚本:文字搜索、划词检索、自动选择已确认答案,并保留华谊练习平台的按库采集、CSV 导出与多题库导入。当前版本 **1.2.10**。 1.2.10 将默认显示/隐藏快捷键简化为 **Alt + Q**,原来的 **Shift + Alt + Q** 仍可使用。普通网页、本地 HTML 和内嵌 iframe 的快捷键行为一致。每页默认隐藏及自动答题默认关闭的行为保留。 1.2.9 明确匹配全部 HTTP、HTTPS 和本地 `file:` 页面。焦点在内嵌 iframe 时,显示/隐藏快捷键也能控制顶层的同一个面板;iframe 中不另建面板、不采集或保存数据。主页面在 window 捕获阶段处理快捷键,避免页面在 document 层拦截后失效。保持每页默认隐藏、自动答题默认关闭,保留1.2.8的重置题库功能。 1.2.8 新增“重置全部题库”,用于清除旧版或错误导入的数据。确认后清空本地全部题库、答案、冲突和四类历史修复备份,取消正在进行的导入及待保存任务,停止自动选择和判断题补齐,并暂停采集。新的题库存储与重置前隔离,旧标签页或旧版脚本再次写入的数据不会混回。升级本身保留已有资料,需要清空时再手动重置。 1.2.7 新增默认关闭的“补齐当前判断题库”。手动启动后会通过正常练习控件逐题作答,等待网站标准反馈与同题可信入库记录一致后再进入下一题;这会改变练习记录。只支持本站500题或232题的正常判断练习,不支持普通网页、正式考试或错题重做。该功能与普通自动选择互斥,详见下方使用说明。仓库答案在实际采集及逐条严格核验后更新,不能从脚本版本或练习进度推定完整。 **2026-10-30 答案来源更正:此前“1884题标准答案全部确认”的结论错误。** Chrome 实际练习和页面业务代码均证实,`/upm/start`、`/upm/wrong/start` 的未作答判断题也可能带有默认 `judgeAnswer: 0`,该值不能视为标准“错误”;旧值为 `1` 且没有提交或标准反馈证据时也不能确认。1.2.6 将这类旧判断题答案改为“待补”,清除仅由列表占位值及其继承 DOM 观察造成的冲突,并保留原值备份。两个可信标准答案不一致时仍保留冲突。 当前仓库保留五库 **1884个完整题目位置,1884题标准答案已确认、0题待补、0题冲突**。判断题库1为500题、判断题库2为232题,单选500 + 401题、多选251题。判断题通过用户授权的正常练习及已作答反馈取得可信标准,每条记录保留答案内容、选项ID和实际来源,并通过严格合并核验。详情及历史更正依据见 [`答案来源更正_20261030.json`](题库/答案来源更正_20261030.json)。 上述冲突数按单条题目记录统计。单选题库1第20、44题虽题干和四个选项相同,2026-10-30已分别通过正常练习的答后标准核验:平台第20题判分标准为A“吸入管直径大于泵的吸入口直径”,第44题为D“停车时先停电机,再关闭出口阀”。原答案值符合平台,现已更新两条可信答后来源;按各自题号及ID保留,不强行统一。仅凭内容仍无法唯一对应,自动选择继续跳过,详见 [`同文答案差异核对`](题库/同文答案差异核对_20261030.json)。732道判断题未发现此类同文标准矛盾。 历史核验中,用户更新1.2.6后在实际Chrome页面确认:判断题库1第67题的助手答案“正确”与网页标准一致,当时未作答的第68题保持待补。重新加载两个判断练习后,分别恢复67、42道已有作答记录的可信标准,共109题;**该轮只读取已有作答的核验过程为0次新提交,连续自动选择关闭**,形成1261已确认、623待补的中间版本。 随后用户明确授权对剩余623道待补位置进行正常练习,知悉会增加累计答题与对错记录。本轮实际采集结合1.2.6的手工正常练习和手动启动的1.2.7补齐功能,确实产生新的练习作答。最终答案逐条来自网站标准反馈或可信已提交记录,保留各自来源;授权范围及累计题数都不用于估算标准答案。仓库题数始终为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);两份文件均为1884题已确认、0待补、0冲突。独立分库、31张原图和严格校验清单见 [`题库说明`](题库/README.md)。 ## 安装与开始使用 1. 在浏览器中安装并启用 Tampermonkey(油猴)。 2. 打开油猴管理面板,选择“新建脚本”,将安装文件的全部内容粘贴进去并保存。 3. 打开或刷新普通网页,按 **Alt + Q** 显示题库助手,再按一次隐藏。每次加载页面都默认完全隐藏,无悬浮按钮;旧版保存的打开状态也会重置。 4. 在华谊练习页面,正常加载的题目会自动保存;只有取得可信提交记录或标准反馈时才保存已确认答案。安装后应重新进入练习,以便观察首次题目响应。普通网页只使用本地题库检索,不观察其网络请求或自动采集表单。 5. 在“文字搜索”中输入或粘贴至少两个字符,按回车或点“搜索”。也可以在页面划选题干后松开鼠标自动查询。 6. 在“题库 / 导出”中检查实际题库名、范围内题数及文件名预览,再导出 CSV 或备份 JSON。已识别的练习页默认当前题库;普通网页默认全部已存题库。 浏览器需允许油猴在相应网站运行用户脚本。Chrome 的扩展详情中,将油猴“网站访问权限”设为允许所有网站,并按浏览器提示启用用户脚本权限;本地 HTML 还需要开启“允许访问文件网址”。若快捷键没有显示面板,先确认扩展、脚本和该站点访问权限均已启用。浏览器内置页面(如 `chrome://`)、扩展页及扩展商店等受限页面不能运行普通用户脚本;这些限制无法通过扩大匹配规则解除。 面板和本地题库搜索适用于上述全部网址;自动选择仍需页面题干、选项及控件可识别,华谊判断题补齐仍仅适用于原平台正常练习。内嵌页面只转发显示/隐藏快捷键,检索时可将题干输入或粘贴到顶层面板。 ## 紧凑白色面板与重复记录修复 面板宽度为 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、完整题干和选项。已有可信标准答案的题目会跳过作答;待补题通过正常选项控件选择“正确”一次,以触发网站返回标准反馈。**这个选择只是取得反馈的练习作答,不能当作正确答案保存**;网站给出的标准可能是“正确”或“错误”。只有当前网页标准反馈与同题可信入库记录一致后,才点击正常“下一题”。身份、来源或答案不一致,或者反馈迟迟不到时停止,保留当前结果供核对。 可随时点击“停止补齐”。暂停采集、切换题库、离开页面、导入题库或发生存储异常时也会停止。隐藏或收起面板后仍会继续;隐藏后按 **Alt + Q** 恢复面板,收起后点击“展开”,再点击“停止补齐”。刷新后保持关闭,不会自动恢复。启动补齐会先停止普通自动选择,启用连续自动选择或点击“答当前题”也会先停止补齐,避免两种模式同时操作。 补齐模式会按上述核验结果点击“下一题”,但不会点击结束、交卷或末题提交按钮。只有全部标准题目位置均有可信答案时才显示完成;已有完整发布题库时仍核对当前题目身份、答案映射及可信来源,网页已有标准反馈时还会比较是否一致。 ## 本次方案:按题库分别统计、搜索和导出 旧版会累积的原因是:默认选择“全部题库”,主统计也是所有本地记录的总数,导出文件统一叫“华谊题库”。保存多个题库本身是正常行为,但当前库的展示与导出范围应该明确区分。 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”。相同题目重复导入会合并,不同题库分别管理。若任一文件格式错误,本次整批不导入,并显示具体出错文件。 导入成功后可在“已保存题库”查看各库名称和题数,再在搜索 / 导出下拉框选择相应题库。导入不会改变页面当前正在练习的题库,也不会自动将导出范围切为全部。 ## 清除旧数据并重新导入 1. 将油猴中的原脚本完整更新为 [`dist/huayi-question-bank.user.js`](dist/huayi-question-bank.user.js)(1.2.10),保存并刷新网页。 2. 按 **Alt + Q** 显示面板。在“题库 / 导出”的“已保存题库”下方,或“设置”顶部,点击 **重置全部题库**;油猴菜单也有同名入口。 3. 确认提示会说明清除范围。如需保留旧资料,先取消并点击“备份 JSON”。确认重置后,本地题数归零,四类历史修复备份一起清除,正在读取的导入文件也不会在稍后写回。 4. 点击“导入多个题库”,选择仓库中已核验的 [`合并题库JSON`](题库/华谊集团化工总控工(高级)-合并题库.json) 或 [`合并CSV`](题库/华谊集团化工总控工(高级)-合并题库.csv),导入后应为 **1884题**。只需选择其中一种;也可导入所需的分库文件。 5. 重置后采集保持暂停,刷新后也不会自动恢复。需要重新采集时,再点击“继续采集”;连续自动选择和判断题补齐仍须手动开启。 重置作用于当前浏览器中同一油猴脚本保存的全部题库,不受搜索或导出范围限制。已打开的新版本标签页会同步清空内存,并关闭自动操作;漏收通知的页面在下次读取、保存或恢复前检查重置状态。旧版页面继续写入旧存储时,新版也不会再读取那一份数据。复制开关和面板偏好保留,网页账号的练习记录以及已下载的文件不受影响。 重置需要先验证空题库和重置标记写入成功,再清理原数据。准备或标记保存失败时保留原题库并显示错误;如果仅旧存储清理失败,会明确提示旧数据已隔离。原题库或修复备份损坏时,仍可使用重置功能重新初始化。 ## 隐藏、收起与恢复 | 操作 | 效果 | 恢复方式 | | --- | --- | --- | | 右上角“收起” | 只显示面板标题栏 | 点击“展开” | | 打开或刷新网页 | 默认完全隐藏,无悬浮按钮 | **Alt + Q** | | 右上角“隐藏” | 面板完全隐藏 | **Alt + Q** | | **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` 依据保留在历史中。随后重新加载取得109道已有作答判断题的 `submitted-list` 标准,形成1261已确认、623待补的第二阶段,第67题的网络结果与人工核验一致。最后经用户授权的正常练习补入其余可信标准,严格核验后为1884已确认、0待补、0冲突。各阶段均未按旧0、1或常识猜填,核验前原值保留在本地 `.cache/` 和 Git 提交 `4bf2de1` 中。 补齐前Chrome判断题缓存为判断1共502条、判断2共232条;判断1额外的2条是历史表示,不增加仓库题目位置。仓库始终按已核验的500、232个标准题目位置保存。答案完整性根据每条标准反馈、来源及位置核验,服务器累计进度和练习结束状态另行核对。 题库保存在油猴脚本存储中,关闭面板、刷新或暂停采集不会清空。更换浏览器、卸载脚本或清理扩展数据前,请先导出 JSON 备份。 ## 源码与验证 `题库/` 已保存经过答案来源更正并完成可信标准采集的五库。使用已核验的分库文件进行严格合并: ```powershell $bankCsvFiles = Get-ChildItem 题库/分题库 -Filter '*.csv' -File npm run merge:banks -- --manifest 题库/页面题数核对.json --force $bankCsvFiles.FullName ``` 页面清单格式为 `{"banks":[{"bankName":"完整题库名称","questionCount":500}, ...]}`,需要列出判断1、判断2、单选1、单选2和多选五个题库。合并前会核对缺库、缺答案、冲突和答案映射,详情写入 `题库清单.json`。当前严格合并通过,`questionsComplete: true`、`answersComplete: true`、`complete: true`,1884题已确认,缺失、冲突及不可映射答案均为0。只有数据尚不足且确实需要保留中间结果时才使用 `--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` 更新到油猴。