// ==UserScript== // @name 中研企课堂全能小助手 // @namespace satnip@163.com // @version 0.0.1 // @description 自动单元考试并记录答案、视频自动播放并跳转至下一集 // @author Caosh // @match https://ent.toujianyun.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=toujianyun.com // @grant GM_registerMenuCommand // @license MIT // @downloadURL none // ==/UserScript== (function () { 'use strict'; GM_registerMenuCommand("开始使用", checkWebType); // 判断网站类型,进行不同操作 function checkWebType() { console.log("欢迎来到中研企课堂全能小助手V0.0.1") // 获取当前网页URL var urlString = window.location.href; if (urlString.includes("course")) { // 课程详情页 setTimeout(() => { setTimeout(autoCompleteCourse, 2000); }, 2000); } else if (urlString.includes("report")) { // 做题记录 setTimeout(() => { setTimeout(gotoAnswer, 2000); }, 2000); } else if (urlString.includes("exercise")) { // 考试 setTimeout(() => { setTimeout(autoExam, 2000); }, 2000); } else if (urlString.includes("answer")) { // 答案 setTimeout(() => { setTimeout(getAnswer, 2000); }, 2000); } else if (urlString.includes("lesson")) { // 视频播放页 autoDisplayVideo(); } } // 课程详情页-自动完成课程(仅考试)并输出课程答案 function autoCompleteCourse() { console.log("开始自动完成课程") // 当前课程答案文件名 var fileName = document.getElementsByClassName("info-title")[0].innerText + ".txt"; // 考试列表 var examList = document.querySelectorAll("[class*='new-detail-list-label detail-list-exercise']"); if (examList.length == 0) { console.log("当前课程没有考试"); } else { // 当前考试答案 localStorage.setItem("exam-content", ""); // 当前是否已经返回结果(第一次进入循环赋值:yes) localStorage.setItem("result", "yes"); // 答案汇总 localStorage.setItem("answer-content", ""); // 进入遍历 traversalExam(0, examList.length, fileName); } } // 自动进入考试页面/答题记录页面,并获取答案 function traversalExam(index, length, fileName) { var examList = document.querySelectorAll("[class*='new-detail-list-label detail-list-exercise']"); if (index <= length) { // 正在进行循环考试 if (index != 0) { console.log("正在进行第" + index + "/" + length + "场考试"); } // 是否正在等待答案 if (localStorage.getItem("result") === "no") { // 正在等待答案 console.log("正在等待答案") setTimeout(() => { traversalExam(index, length, fileName) }, 3000); } else { // 当前总答案 var allAnswer = localStorage.getItem("answer-content"); // 当前进行的考试答案 var examAnswer = localStorage.getItem("exam-content"); if (examAnswer !== "") { console.log("获取到答案:\n" + examAnswer); } localStorage.setItem("answer-content", allAnswer + examAnswer); // 下一场考试节点 var examButton = examList[index]; if (examButton) { // 进入下一场考试 localStorage.setItem("exam-content", ""); localStorage.setItem("result", "no"); examButton.click(); traversalExam(index + 1, length, fileName); } else { // 课程考试结束 console.log("课程考试结束"); saveAnswer(localStorage.getItem("answer-content"), fileName); alert("当前课程已完成,答案已下载至本地") localStorage.removeItem("exam-content"); localStorage.removeItem("result"); localStorage.removeItem("answer-content"); } } } else { // 课程考试结束 saveAnswer(localStorage.getItem("answer-content"), fileName); alert("当前课程已完成,答案已下载至本地") localStorage.removeItem("exam-content"); localStorage.removeItem("result"); localStorage.removeItem("answer-content"); } } // 保存文本到本地 function saveAnswer(text, fileName) { var a = document.createElement('a'); a.style.display = 'none'; a.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(text); a.download = fileName; document.body.appendChild(a); a.click(); document.body.removeChild(a); } // 从答题记录页面查看答案 function gotoAnswer() { var answerButton = document.getElementsByClassName("table table-hover table-list")[0].getElementsByTagName("tbody")[0].getElementsByTagName("a")[1]; answerButton.click(); } // 自动考试(默认选择A选项后提交) function autoExam() { // 题目列表 var questionList = document.getElementsByClassName("question-wrapper"); if (questionList.length == 0) { console.log("未查询到题目列表"); } else { for (var i = 0; i < questionList.length; i++) { var question = questionList[i]; var optionA = question.getElementsByTagName("input")[0]; if (optionA) { optionA.click(); } } } var submitButton = document.getElementsByClassName("btn btn-blue J-save-btn")[0]; if (submitButton) { submitButton.click() } } // 获取答案 function getAnswer() { var result = ""; // 序号-选项映射 const map = new Map(); map.set(0, "A").set(1, "B").set(2, "C").set(3, "D").set(4, "E").set(5, "F").set(6, "G").set(7, "H").set(8, "I").set(9, "J") // 题目列表 var questionList = document.getElementsByClassName("question-wrapper"); if (questionList.length == 0) { localStorage.setItem("exam-content", "未获取到题目列表"); localStorage.setItem("result", "yes"); window.close(); } else { for (var i = 0; i < questionList.length; i++) { // 题目对象 var question = questionList[i]; // 题目 var questionTitle = question.getElementsByClassName("question-title")[0].innerText + "\n"; // 选项 var option = ""; // 选项列表 var questionOptionList = question.getElementsByTagName("li") for (let j = 0; j < questionOptionList.length; j++) { var questionOption = map.get(j) + ":" + questionOptionList[j].innerText; option = option + questionOption + "\n"; } // 答案 var questionAnswer = question.getElementsByClassName("question-answer")[0].innerText + "\n"; result = result + questionTitle; result = result + option; result = result + questionAnswer; } localStorage.setItem("exam-content", result); localStorage.setItem("result", "yes"); window.close(); } } // 自动播放视频 function autoDisplayVideo() { // 定时任务(3秒1次) setInterval(function () { // 获取正在播放的视频 var current_video = document.getElementsByTagName('video')[0]; // 判断视频是否暂停 if (current_video.paused) { // 如果视频暂停 // 获取弹窗中的选项([1]为A选项) var check_option = document.getElementsByTagName('input')[1]; // 判断是否存在该选项 if (check_option) { // 选择该选项 check_option.checked = true; // 点击提交 var submit_button = document.getElementsByClassName('btn btn-blue J-save-answer J-submit-answer')[0]; if (submit_button) { submit_button.click(); } // 点击继续学习 var continue_button = document.getElementsByClassName('btn btn-blue J-submit-answer btn-continue')[0]; if (continue_button) { continue_button.click(); } } // 如果视频仍旧处于暂停状态 if (current_video.paused) { // 判断视频是否播放完毕 if (Math.trunc(current_video.currentTime) == Math.trunc(current_video.duration)) { // 跳转下一视频 console.log("视频播放结束,跳转下一视频"); nextVideo(); } else { // 恢复播放 console.log("视频播放暂停,恢复播放"); current_video.play(); } } } }, 3000) } // 获取当前视频的位置 function getPosition(element, element_list) { for (var i = 0; element != element_list[i]; i++) { } return i; } // 播放下一个视频 function nextVideo() { // 当前播放视频URL var currentVideoUrl = window.location.href; // 视频播放列表 var videoList = document.querySelectorAll('a.catalogue-item.new-catalogue-item'); // 当前播放视频在列表中的序号 var currentPosition = getPosition(currentVideoUrl, videoList); if (currentPosition + 1 >= videoList.length) { console.log("课程学习完毕"); alert("课程学习完毕"); } else { // 下一个视频的URL地址 var nextVideoUrl = videoList[currentPosition + 1].href; // 跳转下一个视频 window.location.href = nextVideoUrl; } } })();