Greasy Fork is available in English.
自动静音播放每页视频、自动作答、修改播放速率!
// ==UserScript==// @name 优学院自动静音播放、自动做练习题、自动翻页、修改播放速率// @namespace [url=mailto:[email protected]][email protected][/url]// @version 1.6.1// @description 自动静音播放每页视频、自动作答、修改播放速率!// @author EliotZhang、Brush-JIM// @match *://*.ulearning.cn/learnCourse/*// @require https://code.jquery.com/jquery-3.4.1.min.js// @require https://code.jquery.com/ui/1.12.1/jquery-ui.js// @run-at document-start// @grant unsafeWindow// ==/UserScript==(function () {'use strict';/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* 优学院自动静音播放、自动做练习题、自动翻页、修改播放速率脚本v1.6.1由EliotZhang @ 2020/06/04 最后更新* 特别感谢Brush-JIM (Mail:[email protected]) 提供的脚本改进支持!* 使用修改播放速率功能请谨慎!!!产生的不良后果恕某概不承担!!!* 请保持网课播放页面在浏览器中活动,避免长时间后台挂机(##有挂机检测功能),以减少不必要的损失* 自动作答功能由于精力有限目前只支持单/多项选择、判断题、部分填空问答题,如果出现问题请尝试禁用这个功能!* 如果脚本无效请优先尝试刷新页面,若是无效请查看脚本最后的解决方案,如果还是不行请反馈给本人,本人将会尽快修复* 如果是因为网络问题,本人也无能为力* 如果在使用中还有什么问题请通过邮箱联系EliotZhang:[email protected]* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/var N = 1.50;var EnableAutoPlay = true;var EnableAutoMute = true;var EnableAutoChangeRate = true;var EnableAutoFillAnswer = true;var EnableAutoShowAnswer = true;var EnableAutoAnswerChoices = true;var EnableAutoAnswerJudges = true;var EnableAutoAnswerFills = true;// 新增函数 By Brush-JIMfunction Video(func = {}, slept = false) {if (!EnableAutoPlay)return;if (autoAnswering) {setTimeout(function () {Video({}, true);}, '1000');return;}if (!slept) {setTimeout(function () {Video({}, true);}, '3000');return;}var A_tmp = $('video');var A = [];for (let d = 0; d < A_tmp.length; d++) {if (A_tmp[d].src != "") {A.push(A_tmp[d]);}}if (A.length === 0) {GotoNextPage();return;}var B = [];var tmp = $('div[class="video-bottom"]');for (let b = 0; b < tmp.length; b++) {let span = tmp[b].getElementsByTagName("span")[0];if (span) {let data_bind = span.getAttribute('data-bind');if (data_bind == 'text: $root.i18nMessageText().finished' || data_bind == 'text: $root.i18nMessageText().viewed' || data_bind == 'text: $root.i18nMessageText().unviewed') {B.push(data_bind);}}}function video_ctrl(func) {for (let c = 0; c < A.length; c++) {if (B[c] == 'text: $root.i18nMessageText().viewed' || B[c] == 'text: $root.i18nMessageText().unviewed' || B[c] === false) {if (c - 1 >= 0) {if (A[c - 1].currentTime != 0) {if (A[c - 1].paused === true) {A[c - 1].play()}if (EnableAutoMute && A[c - 1].muted === false) {A[c - 1].muted = true;}if (EnableAutoChangeRate && A[c - 1].playbackRate != N) {A[c - 1].playbackRate = N}break;}}if (A[c].paused === true) {A[c].play();}if (EnableAutoMute && A[c].muted === false) {A[c].muted = true;}if (EnableAutoChangeRate && A[c].playbackRate != N) {A[c].playbackRate = N;}break;}}if (B[B.length - 1] == 'text: $root.i18nMessageText().finished' || B[B.length - 1] === true) {if (A[A.length - 1].currentTime != 0) {if (A[A.length - 1].paused === true) {A[A.length - 1].play()}if (EnableAutoMute && A[A.length - 1].muted === false) {A[A.length - 1].muted = true}if (EnableAutoChangeRate && A[A.length - 1].playbackRate != N) {A[A.length - 1].playbackRate = N}setTimeout(func, "2000", func);} else {GotoNextPage();}} else {setTimeout(func, "2000", func);}}if (A.length == B.length) {video_ctrl(Video);} else {B = [];for (let d = 0; d < A.length; d++) {B[d] = false;A[d].addEventListener("ended", function () {B[d] = true;}, true);}video_ctrl(video_ctrl);}}function GotoNextPage() {if (autoAnswering || !EnableAutoPlay || checkingModal)return;var nextPageBtn = $('.mobile-next-page-btn');if (nextPageBtn.length === 0)return;nextPageBtn.each((k, n) => {n.click();});setTimeout(Video, "1000");}function CheckModal(slept = false) {if (autoAnswering)return;if (!slept) {setTimeout(function () {CheckModal(true);}, '2000');return;}if (EnableAutoPlay) {CheckModal();}checkingModal = true;var qw = $('.question-wrapper');if (qw.length > 0 && EnableAutoFillAnswer) {ShowAndFillAnswer();checkingModal = false;return;}var statModal = $('#statModal');if (statModal.length > 0) {var ch = statModal[0];ch.getElementsByTagName('button');if (ch.length >= 2)ch[1].click();}var err = $('.mobile-video-error');if (err && err.css('display') != 'none')$('.try-again').click();var alertModal = document.getElementById("alertModal");if (alertModal === undefined) {checkingModal = false;return;}if (alertModal.className.match(/\sin/)) {var op = $('.modal-operation').children();if (op.length >= 2)op[EnableAutoFillAnswer ? 0 : 1].click();else {var continueBtn = $('.btn-submit');if (continueBtn.length > 0) {continueBtn.each((k, v) => {if ($(v).text() != '提交')$(v).click();});}}if (EnableAutoFillAnswer)ShowAndFillAnswer();}checkingModal = false;}function RemoveDuplicatedItem(arr) {for (var i = 0; i < arr.length - 1; i++) {for (var j = i + 1; j < arr.length; j++) {if (arr[i] == arr[j]) {arr.splice(j, 1);j--;}}}return arr;}function Escape2Html(str) {var arrEntities = {'lt': '<','gt': '>','nbsp': ' ','amp': '&','quot': '"'};return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) {return arrEntities[t];});}function DelHtmlTag(str) {return str.replace(/(<[^>]+>|\\n|\\r)/g, " ");}function FillAnswers() {if (!autoAnswering || !EnableAutoAnswerFills)return;var ansarr = [];var idList = [];var re = [];var txtAreas = $('textarea, .blank-input');$(txtAreas).each((k, v) => {var reg = /question\d+/;var fa = $(v).parent();while (!reg.test($(fa).attr('id'))) {fa = $(fa).parent();}var id = $(fa).attr('id').replace('question', '');idList.push(id);});idList = RemoveDuplicatedItem(idList);$(idList).each((k, id) => {$.ajax({url: 'https://api.ulearning.cn/questionAnswer/' + id,type: "GET",contentType: "application/json",dataType: 'json',async: false,data: {parentId: pageid,},success: function (r###lt, status, xhr) {re.push(r###lt.correctAnswerList);}});});$(re).each((k1, v1) => {if (v1.length == 1) {ansarr.push(DelHtmlTag(Escape2Html(v1[0])));} else {$(v1).each(function (k2, v2) {ansarr.push(DelHtmlTag(Escape2Html(v2)));});}});$(txtAreas).each((k, v) => {$(v).val(ansarr.shift());});}function ShowAndFillAnswer() {if (autoAnswering | !EnableAutoFillAnswer)return;autoAnswering = true;var sqList = [];var qw = $('.question-wrapper');var pages = $('.page-item');var an = [];qw.each(function (k, v) {var id = $(v).attr('id');sqList.push(id.replace('question', ''));});var flag = false;pages.each(function (k, v) {if (flag) return;var sp = $(v).find('.page-name');if (sp.length > 0 && sp[0].className.search('active') >= 0) {var pd = $(v).attr('id');pd = pd.slice(pd.search(/\d/g));pageid = pd;flag = true;}});if (!flag) {autoAnswering = false;GotoNextPage();return;}if (sqList.length <= 0) {autoAnswering = false;return;}$(sqList).each(function (k, id) {var flag = false;while (!flag)$.ajax({url: 'https://api.ulearning.cn/questionAnswer/' + id,type: "GET",contentType: "application/json",dataType: 'json',async: false,data: {parentId: pageid,},success: function (r###lt, status, xhr) {an.push(r###lt.correctAnswerList);flag = true;}});});//if (EnableAutoShowAnswer) {var t = qw.find('.question-title-html');t.each(function (k, v) {var ans = an.shift();$(v).after('<span style="color:red;">答案:' + ans + '</span>');an.push(ans);});}//var checkBox = qw.find('.checkbox');var choiceBox = qw.find('.choice-btn');var checkList = [];var choiceList = [];let lasOffsetP = '';checkBox.each((k, cb) => {if (lasOffsetP == $(cb).offsetParent().attr('id')) {checkList[checkList.length - 1].push(cb);} else {var l = [];l.push(cb);checkList.push(l);lasOffsetP = $(cb).offsetParent().attr('id');}});lasOffsetP = '';choiceBox.each((k, cb) => {if (lasOffsetP == $(cb).offsetParent().attr('id')) {choiceList[choiceList.length - 1].push(cb);} else {var l = [];l.push(cb);choiceList.push(l);lasOffsetP = $(cb).offsetParent().attr('id');}});an.forEach(a => {if (a == null || a == undefined || a.length <= 0) {return;}if (a[0].match(/[A-Z]/) && a[0].length == 1 && EnableAutoAnswerChoices) {var cb = checkList.shift();a.forEach(aa => {var cccb = $(cb[aa.charCodeAt() - 65]);if (cccb[0] === undefined || (cccb[0] != undefined && cccb[0].className.search('selected') < 0))cccb.click();});} else if (a[0].match(/(([tT][rR][uU][eE])|([fF][aA][lL][sS][eE]))/) && EnableAutoAnswerJudges) {var ccb = choiceList.shift();a.forEach(aa => {if (aa.match(/([tT][rR][uU][eE])/))ccb[0].click();elseccb[1].click();});}return;});if (EnableAutoAnswerFills) {FillAnswers();$.globalEval("$('textarea, .blank-input').trigger('change')");}if (EnableAutoPlay) {$('textarea, .blank-input').trigger('change');$('.btn-submit').click();var A_tmp = $('video');var A = [];for (let d = 0; d < A_tmp.length; d++) {if (A_tmp[d].src != "") {A.push(A_tmp[d]);}}if (A.length === 0) {autoAnswering = false;GotoNextPage();return;}}autoAnswering = false;}function LoadStyle(url) {var link = document.createElement('link');link.type = 'text/css';link.rel = 'stylesheet';link.href = url;var head = document.getElementsByTagName('head')[0];head.appendChild(link);}function DrawOptionPanel() {LoadStyle('https://eliotzhang.club/CSS/ulearning.css');var root = document.getElementsByTagName('body')[0];var panel = document.createElement('div');root.appendChild(panel);panel.setAttribute('class', 'OptionPanel');panel.innerHTML = "<div class='OptionPanel'><div class='DragBall'>UL</div><div class='MainPanel'><h2 class='OptionMainTitle'>优学院辅助脚本</br>by EliotZhang、BrushJIM</h2><button id='MainBtn'>隐藏设置</button><h4>视频播放</h4><ul class='OptionUL'><li>自动翻页、播放视频?<input class='OptionInput'id='AutoPlay'type='checkbox'checked='checked'></li><li>自动静音?<input class='OptionInput'id='AutoMute'type='checkbox'checked='checked'></li><li>自动调整速率(依赖自动播放视频功能)?<input class='OptionInput'id='AutoPlayRate'type='checkbox'checked='checked'></li><li>自动的速率速度<input class='OptionInput'id='AutoPlayRateChange'type='number'value='1.50'step='0.25'min='0.25'max='15.00'></li></ul><h4>自动作答</h4><ul class='OptionUL'><li>自动作答(总开关)?<input class='OptionInput'id='AutoAnswer'type='checkbox'checked='checked'></li><li>自动显示答案?<input class='OptionInput'id='AutoShowAnswer'type='checkbox'checked='checked'></li><li>自动作答选择题?<input class='OptionInput'id='AutoAnswerChoices'type='checkbox'checked='checked'></li><li>自动作答判断题?<input class='OptionInput'id='AutoAnswerJudges'type='checkbox'checked='checked'></li><li>自动作答填空、简答题?<input class='OptionInput'id='AutoAnswerFills'type='checkbox'checked='checked'></li></ul><button id='SaveOpBtn'>保存设置并刷新脚本</button><p style='color:hotpink;'>若<strong>关闭自动翻页功能</strong>导致<strong>自动作答系列功能失效</strong>请点击<strong>保存设置并刷新脚本按钮!</strong></p><p style='color:hotpink;'>若关闭自动翻页功能答完题后请<strong>手动提交!!</strong></p></div></div>";}function Init() {mainBtn = document.getElementById('MainBtn');dragBall = $('.DragBall');saveOpBtn = document.getElementById('SaveOpBtn');OptionPanel = $('.OptionPanel');MainPanel = $('.MainPanel');autoPlayOp = document.getElementById('AutoPlay');autoMuteOp = document.getElementById('AutoMute');autoPlayRateOp = document.getElementById('AutoPlayRate');autoPlayRateChangeOp = document.getElementById('AutoPlayRateChange');autoAnswerOp = document.getElementById('AutoAnswer');autoShowAnswerOp = document.getElementById('AutoShowAnswer');autoAnswerChoicesOp = document.getElementById('AutoAnswerChoices');autoAnswerJudgesOp = document.getElementById('AutoAnswerJudges');autoAnswerFillsOp = document.getElementById('AutoAnswerFills');dragBall.draggable({containment: ".page-scroller ps ps--theme_default",start: function (event, ui) {$(this).addClass('noclick');}});dragBall.hide();mainBtn.addEventListener('click', function () {MainPanel.hide();dragBall.show();}, true);dragBall.click(function (e) {if ($(this).hasClass('noclick')) {$(this).removeClass('noclick');} else if (e.target == e.currentTarget) {MainPanel.show();$(this).hide();}});autoPlayRateChangeOp.addEventListener('change', function () {let val = autoPlayRateChangeOp.value;if (val > 15.0)autoPlayRateChangeOp.value = 15;else if (val < 0.25)autoPlayRateChangeOp.value = 0.25;}, true);autoPlayOp.addEventListener('change', function () {if (autoPlayOp.checked === false)autoMuteOp.checked = autoPlayRateOp.checked = false;elseautoMuteOp.checked = autoPlayRateOp.checked = true;});autoAnswerOp.addEventListener('change', function () {if (autoAnswerOp.checked === false)autoAnswerChoicesOp.checked = autoAnswerJudgesOp.checked = autoAnswerFillsOp.checked = autoShowAnswerOp.checked = false;elseautoAnswerChoicesOp.checked = autoAnswerJudgesOp.checked = autoAnswerFillsOp.checked = autoShowAnswerOp.checked = true;});saveOpBtn.addEventListener('click', function () {EnableAutoMute = autoMuteOp.checked;EnableAutoChangeRate = autoPlayRateOp.checked;EnableAutoPlay = autoPlayOp.checked;EnableAutoShowAnswer = autoShowAnswerOp.checked;EnableAutoAnswerChoices = autoAnswerChoicesOp.checked;EnableAutoAnswerJudges = autoAnswerJudgesOp.checked;EnableAutoAnswerFills = autoAnswerFillsOp.checked;if (!EnableAutoShowAnswer && !EnableAutoAnswerChoices && !EnableAutoAnswerJudges && !EnableAutoAnswerFills)autoAnswerOp.checked = false;EnableAutoFillAnswer = autoAnswerOp.checked;N = autoPlayRateChangeOp.value;// Savewindow.localStorage.EZUL = 'EliotZhang、BrushJIM';window.localStorage.EAM = EnableAutoMute ? 't' : 'f';window.localStorage.EACR = EnableAutoChangeRate ? 't' : 'f';window.localStorage.EAP = EnableAutoPlay ? 't' : 'f';window.localStorage.EASA = EnableAutoShowAnswer ? 't' : 'f';window.localStorage.EAAC = EnableAutoAnswerChoices ? 't' : 'f';window.localStorage.EAAJ = EnableAutoAnswerJudges ? 't' : 'f';window.localStorage.EAAF = EnableAutoAnswerFills ? 't' : 'f';window.localStorage.EAFA = EnableAutoFillAnswer ? 't' : 'f';window.localStorage.APRC = autoPlayRateChangeOp.value.toString();Video({}, true);CheckModal(true);}, true);// Loadif (window.localStorage.getItem('EZUL') === 'EliotZhang、BrushJIM') {autoMuteOp.checked = EnableAutoMute = window.localStorage.EAM == 't';autoPlayRateOp.checked = EnableAutoChangeRate = window.localStorage.EACR == 't';autoPlayOp.checked = EnableAutoPlay = window.localStorage.EAP == 't';autoShowAnswerOp.checked = EnableAutoShowAnswer = window.localStorage.EASA == 't';autoAnswerChoicesOp.checked = EnableAutoAnswerChoices = window.localStorage.EAAC == 't';autoAnswerJudgesOp.checked = EnableAutoAnswerJudges = window.localStorage.EAAJ == 't';autoAnswerFillsOp.checked = EnableAutoAnswerFills = window.localStorage.EAAF == 't';autoAnswerOp.checked = EnableAutoFillAnswer = window.localStorage.EAFA == 't';autoPlayRateChangeOp.value = N = parseFloat(window.localStorage.APRC);}}function Main() {DrawOptionPanel();Init();Video();CheckModal();}var autoAnswering = false;var checkingModal = false;var mainBtn;var dragBall;var saveOpBtn;var OptionPanel;var MainPanel;var autoPlayOp;var autoMuteOp;var autoPlayRateOp;var autoPlayRateChangeOp;var autoAnswerOp;var autoShowAnswerOp;var autoAnswerChoicesOp;var autoAnswerJudgesOp;var autoAnswerFillsOp;var pageid = '';setInterval(function () { unsafeWindow.document.dispatchEvent(new Event('mousemove')) }, 1000);setTimeout(Main, '3000');})();