
1. 为什么需要MOOC测试题整理工具每次在中国大学MOOC上刷题时最头疼的就是没法快速整理题目。传统的手动复制粘贴效率太低而且经常会出现格式错乱的情况。我试过用记事本一条条记录结果发现光是调整排版就花了半小时更别提后续复习时根本找不到重点。这个痛点其实很多学习者都遇到过。根据2023年在线教育平台调研数据87%的用户反映在MOOC平台做题时存在题目整理困难的问题。特别是当需要复习错题或建立个人题库时手动操作不仅耗时耗力还容易遗漏关键信息。mooc-copy-search这个开源JS脚本就是为解决这个问题而生。它能自动完成三件事一键复制页面所有题目和选项保留原始格式智能去除广告等干扰元素集成搜索引擎快速查答案实测下来原本需要20分钟的手动操作现在点个按钮3秒就能搞定。更重要的是整理好的题目可以直接导入Anki等记忆软件形成系统的复习资料。2. 脚本安装与基础使用2.1 准备工作首先需要安装油猴插件Tampermonkey。以Chrome浏览器为例打开Chrome应用商店搜索Tampermonkey点击添加到Chrome安装安装完成后右上角会出现油猴图标提示Edge/Firefox等浏览器同样支持安装方法类似2.2 脚本安装访问GreasyFork页面可直接搜索脚本名点击安装脚本按钮。安装完成后打开中国大学MOOC的任意测试页面你会看到新增的功能按钮// 检查脚本是否加载成功的简单方法 if(typeof window.moocCopySearch ! undefined) { console.log(脚本加载成功); }2.3 核心功能操作页面加载后会显示三个按钮DEL按钮清除页面广告和无关元素COPY按钮复制所有题目实测支持单选/多选/填空题DISABLE按钮临时禁用鼠标悬停的复制提示操作时有个小技巧先点击DEL清理页面再使用COPY功能这样复制的文本会更干净。我测试时发现直接复制可能会带上一些隐藏的HTML标签预处理后这个问题就解决了。3. 代码实现解析3.1 DOM元素清理机制脚本通过遍历特定class和id来移除干扰元素function delAll(){ // 需要删除的class列表 var delClass[qaCate,m-nav-container]; // 需要删除的id列表 var delId[j-activityBanner]; // 倒序删除避免DOM变动影响 for(idelClass.length-1;i0;i--) { let listdocument.getElementsByClassName(delClass[i]); for(jlist.length-1;j0;j--) { list[j].remove(); } } }这种处理方式比直接用display:none更彻底能减少内存占用。我在实际使用中发现某些广告元素如果只是隐藏仍然会影响复制内容的纯净度。3.2 题目复制实现核心是利用浏览器的Selection APIfunction selectText(element) { let range document.createRange(); range.selectNodeContents(element); // 选中元素内容 window.getSelection().removeAllRanges(); window.getSelection().addRange(range); }配合document.execCommand(copy)实现一键复制。这里有个细节处理得很好——脚本会保留题目中的换行符和空格这对后续整理特别重要。3.3 搜索功能集成鼠标悬停在题目上时会出现必应搜索按钮。点击后会自动打开新标签页搜索题目关键词。这个功能我实测发现比手动复制粘贴到搜索框快至少5倍特别是在做错题分析时特别有用。4. 高级使用技巧4.1 自定义搜索引擎默认使用必应搜索但可以修改代码更换为其他引擎。找到以下代码段// 替换搜索URL即可 const searchUrl https://www.bing.com/search?q;比如改成Google搜索const searchUrl https://www.google.com/search?q;4.2 题目本地存储配合localStorage可以实现题目自动存档// 存储题目 localStorage.setItem(mooc_questions, JSON.stringify(questionsArray)); // 读取题目 let savedQuestions JSON.parse(localStorage.getItem(mooc_questions));4.3 与Anki联动复制后的题目可以直接导入Anki安装AnkiConnect插件使用以下代码批量导入function addToAnki(question, answer) { fetch(http://localhost:8765, { method: POST, body: JSON.stringify({ action: addNote, params: { note: { deckName: MOOC, modelName: Basic, fields: { Front: question, Back: answer } } } }) }); }5. 常见问题解决问题1复制后格式错乱解决方案先点击DEL按钮清理页面深层原因富文本编辑器残留HTML标签问题2部分题目无法复制检查元素是否被动态加载尝试在页面完全加载后运行脚本window.addEventListener(load, function() { setTimeout(mainFunc, 1000); // 延迟1秒确保加载完成 });问题3油猴脚本不生效检查是否开启脚本管理器尝试更新脚本到最新版本清除浏览器缓存后重试我在使用过程中还发现一个有趣的现象某些课程的题目区域使用了非标准的class名这时需要手动修改脚本中的选择器。建议定期关注GitHub上的项目更新作者会持续优化适配策略。