目 录CONTENT

文章目录

自动化脚本:让在线学习更高效

Finley
2026-03-30 / 0 评论 / 1 点赞 / 26 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
广告 广告

引言及简介

随着在线教育的普及,线上学习成为了许多高校和培训机构的首选平台。然而,大量的视频课程和章节测验往往让人感到疲惫。本文将介绍一个专为线上学习设计的自动化脚本,它能够自动播放视频、自动答题,让学习过程更加轻松高效。
这是一个功能强大的 Tampermonkey 用户脚本,专为线上学习设计。它不仅能够自动播放视频,还能智能识别并完成章节测验,支持单选题、多选题和判断题的自动作答。

主要功能

  • 自动播放视频:自动检测并播放课程视频,支持多视频队列管理

  • 智能答题:自动识别章节测验,支持单选、多选、判断题的自动作答

  • 重做机制:当答案错误时,自动重做并填写正确答案

  • 后台播放:支持标签页后台运行,不影响其他操作

  • 异常监控:自动检测播放异常,必要时刷新页面

  • 可视化面板:提供美观的控制面板,实时显示播放状态和进度

使用方式

安装步骤

  1. 安装 Tampermonkey 扩展

    • Chrome:访问 Chrome 网上应用店搜索 “Tampermonkey” 并安装

    • Firefox:访问 Firefox 附加组件商店搜索 “Tampermonkey” 并安装

    • Edge:访问 Microsoft Edge 扩展商店搜索 “Tampermonkey” 并安装

  2. 创建新脚本

    • 点击 Tampermonkey 图标,选择"添加新脚本"

    • 删除默认代码,粘贴本文提供的完整脚本代码

    • Ctrl+S 保存脚本

  3. 访问学习页面

    • 打开学习课程页面

    • 脚本会自动运行,显示控制面板

界面说明

enter image description here

脚本运行后会在页面右上角显示一个控制面板,包含以下信息:

  • 视频状态:显示当前视频的播放状态(播放中/暂停/已完成)

  • 播放速度:当前视频播放倍速(默认2倍速)

  • 剩余时间:当前视频剩余播放时间

  • 音量状态:静音状态(默认静音)

  • 视频进度:当前第几个视频/总视频数

按钮功能

  • 2x速:循环切换播放速度(1x → 1.25x → 1.5x → 2x)

  • 静音:切换静音状态

  • 下一节:手动跳转到下一章节

答题流程

当检测到章节测验时,脚本会自动:

  1. 检测测验:识别测验页面并获取测验状态

  2. 第一次提交:提交空白答案获取正确答案

  3. 提取答案:从提交结果中提取正确答案

  4. 重做答题:自动点击重做按钮

  5. 填写答案:根据正确答案填写所有题目

  6. 最终提交:提交答案并自动跳转下一章节

技术实现

1. 页面检测机制

脚本使用多种方式检测当前页面类型:

// 检测章节测验页面
function isQuizPage() {
 // 检测 .fr.testTit_status 元素
 const testStatusDiv = document.querySelector('.fr.testTit_status');
 if (testStatusDiv && testStatusDiv.textContent.includes('待完成')) {
 return true;
 }
  
 // 检测页面文本
 const pageText = document.body.innerText;
 if (pageText.includes('章节测验') && pageText.includes('题量')) {
 return true;
 }
  
 // 检测试题结构
 if (/[一二三四]、[单选题|多选题|判断题]/.test(pageText)) {
 return true;
 }
  
 // 检测 iframe 中的内容
 const docs = getAllDocumentsRecursive(document);
 for (let doc of docs) {
 if (doc.querySelector('.TiMu')) {
 return true;
 }
 }
  
 return false;
}

2. 视频自动播放

脚本通过递归查找所有 iframe 来定位视频元素:

function findAllVideos() {
 const videos = [];
  
 // 查找主视频
 const mainVideo = document.querySelector('#iframe')
 ?.contentDocument?.querySelector('iframe')
 ?.contentDocument?.querySelector('#video_html5_api');
  
 // 查找所有 iframe 中的视频
 const iframes = document.querySelectorAll('iframe');
 iframes.forEach(iframe => {
 const videoInIframe = iframe.contentDocument?.querySelector('video');
 if (videoInIframe) videos.push(videoInIframe);
 });
  
 // 查找直接视频元素
 const directVideos = document.querySelectorAll('video');
 directVideos.forEach(v => videos.push(v));
  
 return videos;
}

3. 答案提取算法

脚本通过解析提交后的页面,提取正确答案:


function extractAndStoreAnswers() {
 const docs = getAllDocumentsRecursive(document);
 let questionIndex = 0;
  
 for (let doc of docs) {
 const questions = doc.querySelectorAll('.TiMu, .questionLi');
  
 for (let question of questions) {
 // 识别题目类型
 let questionType = 0; // 0:单选, 1:多选, 3:判断
 if (question.textContent.includes('判断题')) {
 questionType = 3;
 } else if (question.textContent.includes('多选题')) {
 questionType = 1;
 }
 
 // 提取正确答案
 let answer = '';
 const correctElements = question.querySelectorAll('.correctAnswer');
 for (let el of correctElements) {
 const match = el.textContent.match(/正确答案[::]\s*([^,\n]+)/);
 if (match) {
 answer = match[1].trim();
 break;
 }
 }
  
 // 判断题答案转换
 if (questionType === 3 && answer) {
 if (answer.includes('对') || answer === 'A') {
 answer = '对';
 } else if (answer.includes('错') || answer === 'B') {
 answer = '错';
 }
 }
  
 answerState.answers[questionIndex] = answer;
 questionIndex++;
 }
 }
}

4. 自动答题实现

脚本通过模拟点击和 DOM 操作来自动填写答案:


function fillAllAnswers() {
 const questions = document.querySelectorAll('.TiMu');
  
 questions.forEach((question, index) => {
 const answer = answerState.answers[index];
 const options = answer.split('');
  
 for (let option of options) {
 // 查找对应的选项元素
 let input = question.querySelector(`input[value="${option}"]`);
 if (input) {
 input.checked = true;
 input.dispatchEvent(new Event('change', { bubbles: true }));
 }
  
 // 通过 label 文本查找
 if (!input) {
 const labels = question.querySelectorAll('label');
 for (let label of labels) {
 if (label.textContent.startsWith(option + '.')) {
 const radio = label.querySelector('input');
 if (radio) radio.checked = true;
 break;
 }
 }
 }
 }
 });
  
 // 提交答案
 setTimeout(() => submitAnswers(), 3000);
}

5. 异常监控与自动刷新

脚本实时监控视频播放状态,异常时自动刷新:


function startPlaybackMonitor() {
 setInterval(() => {
 if (!currentVideo) {
 startCountdown('未检测到视频元素');
 return;
 }
  
 const isPlaying = !currentVideo.paused && 
 !currentVideo.ended && 
 currentVideo.readyState >= 3;
  
 if (isPlaying) {
 // 播放正常,重置计时器
 clearCountdown();
 } else {
 // 播放异常,启动倒计时
 if (!playbackMonitor.isWaiting) {
 startCountdown('视频暂停或加载失败');
 }
 }
 }, 2000);
}

6. 跨 iframe 文档访问

由于学习通使用多层 iframe 嵌套,脚本实现了递归文档访问:


function getAllDocumentsRecursive(doc, visited = new Set()) {
 const docs = [doc];
  
 const iframes = doc.querySelectorAll('iframe');
 for (let iframe of iframes) {
 try {
 const iframeDoc = iframe.contentDocument || 
 iframe.contentWindow?.document;
 if (iframeDoc && !visited.has(iframeDoc)) {
 visited.add(iframeDoc);
 const subDocs = getAllDocumentsRecursive(iframeDoc, visited);
 docs.push(...subDocs);
 }
 } catch(e) {}
 }
  
 return docs;
}

技术亮点

1. 智能答案提取

脚本通过第一次提交获取正确答案,然后自动重做并填写,解决了传统答题脚本无法获取正确答案的问题。

2. 多层次页面检测

通过检测 DOM 元素、文本内容、URL 和 iframe 内容,确保能够准确识别各种形式的章节测验页面。

3. 完善的异常处理

  • 自动检测视频播放异常

  • 网络问题自动重试

  • 超时自动刷新页面

  • 防止重复提交

4. 优雅的 UI 设计

  • 可拖拽移动的控制面板

  • 贴边隐藏功能

  • 折叠/展开功能

  • 实时进度显示

5. 低侵入性

  • 不影响原有页面功能

  • 可随时手动控制

  • 自动停止监控避免资源浪费

注意事项

  1. 合理使用:请在学习目的下使用本脚本,不要滥用

  2. 网络环境:确保网络稳定,避免因网络问题导致脚本异常

  3. 浏览器兼容:建议使用 Chrome 或 Edge 浏览器

  4. 定期更新:关注脚本更新,学习通平台更新后可能需要相应调整

总结

这个线上学习自动化脚本通过智能的页面检测、答案提取和自动答题机制,大大提升了在线学习的效率。它不仅解放了双手,还通过异常监控和自动恢复机制保证了运行的稳定性。

欢迎更多开发者参与改进。如果你有任何建议或问题,欢迎在评论区留言讨论。

附录

  • 脚本版本:1.8.0

  • 最后更新:2026年3月

  • 依赖:Tampermonkey 或 Greasemonkey


本文旨在技术交流,请合理使用自动化工具,尊重平台规则和版权。

1

评论区