// ==UserScript== // @name 国家中小学智慧教育平台刷课脚本(16倍速,自动答题,自动切换列表中的视频,后台播放,学时不更新的解决方法看下面) // @namespace http://tampermonkey.net/ // @version 1.2 // @license CC BY-NC-SA // @description 16倍速,自动答题,自动切换列表中的视频,后台播放,学时不更新的解决方法看下面 // @author HGGshiwo // @match https://*.zxx.edu.cn/teacherTraining/courseDetail* // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @downloadURL none // ==/UserScript== (function () { "use strict"; // function const sleep = async (time) => { var p = new Promise((resolve, reject) => { setTimeout(() => { resolve(); }, time); }); return p; }; const getActiveVideoAndPlay = async () => { if (first) { //如果第一次进入,请求用户的等待时间。 await sleep(2000); first = false; var input = prompt("设定等待时间,脚本运行正常的请直接点确定", waitTime); try { waitTime = parseInt(input); localStorage.setItem("waitTime", input); } catch (e) { console.log(666, e); waitTime = 1000; } } else { await sleep(1000); } //点掉确认框 var confirmBtns = document.getElementsByClassName( "fish-modal-confirm-btns" ); if (confirmBtns.length !== 0) { confirmBtns[0].click(); } //获取当前视频位置 try { var groups = document.getElementsByClassName("fish-collapse-item"); var groupNo = [...groups].findIndex((item) => { return item.className.includes("active"); }); var resItems = groups[groupNo].getElementsByClassName("resource-item"); var resNo = [...resItems].findIndex((item) => { return item.className.includes("active"); }); } catch (e) { console.log(666, e); getActiveVideoAndPlay(); return; } console.log(666, `开始观看: 第${resNo + 1}个视频,第${groupNo + 1}组`); try { var vid = document.getElementsByTagName("video")[0]; vid.muted = true; vid.play(); document.querySelector("video").playbackRate = 16; vid.addEventListener( "ended", async () => { //计算下一个视频的位置 if (resNo + 1 == resItems.length) { //看完了当前组 if (groupNo + 1 == groups.length) { console.log(666, "看完了所有组, 退出"); } else { //观看下一组 console.log(666, `点击下一组的第一个视频`); document .getElementsByClassName("fish-collapse-header") [groupNo + 1].click(); await sleep(1000); resItems = groups[groupNo + 1].getElementsByClassName("resource-item"); resItems[0].click(); getActiveVideoAndPlay(); } } else { //观看当前组的下一个视频 resItems[resNo + 1].click(); console.log(666, `点击当前组的下一个视频`); getActiveVideoAndPlay(); } }, false ); vid.addEventListener("pause", async () => { if (document.hidden) { vid.play(); //因为页面隐藏而暂停,则直接播放 return; } await sleep(waitTime); var options = document.getElementsByClassName("nqti-option"); var i = 0; while (options.length) { i += 1; options[0].click(); await sleep(waitTime); var btns = document.getElementsByClassName("fish-btn"); if (btns.length === 1) { btns[0].click(); } else { btns[1].click(); } await sleep(waitTime); options = document.getElementsByClassName("nqti-option"); } }); } catch (e) { console.log(666, e); getActiveVideoAndPlay(); //获取不到视频,再次调用 } }; var first = true; var waitTime = localStorage.getItem("waitTime"); waitTime = waitTime ? parseInt(waitTime) : "1000"; console.log(666, "刷课脚本开始运行"); getActiveVideoAndPlay(); })();