// ==UserScript== // @name NeumoocStar // @namespace http://tampermonkey.net/ // @version 0.5 // @description 东软慕课+课后作业,借鉴了NeumoocBBQ,目前有近代史,毛泽东思想,如果你有答案可联系我添加。 // @author Aisen // @match http://mooc.neumooc.com/course/play/* // @run-at document-end // @grant unsafeWindow // @grant GM_xmlhttpRequest // @grant GM_addStyle // @grant GM_download // @connect http://neu.aisencode.cn/* // @requier https://code.jquery.com/jquery-3.1.1.min.js // @license MIT // @downloadURL none // ==/UserScript== var window = unsafeWindow; var $ = unsafeWindow.jQuery; var setting = { time: 5e3, // 默认响应速度为5秒,不建议小于3秒 courseUrl: '', //课程网址,若为空脚本可能会暂停,建议每次添加上去,因为学校服务器容易500 //格式:'http://mooc.neumooc.com/course/play/init?courseId=C67744D352EB42B199D5905E7167AB97' answers: {}, //如果有答案则会从服务器获取,如果没有则为空,如果自己有答案可加入 //格式为 {"outl_D247C619659A4B12987B5E5D148E8065": "B B C","outl_6C746E61867D457FAA6218C73AAF5AC3": "C C B"} doTest: true,//默认开启做题 justDoTest: false //只做题不看视频,默认关闭,开启为true }; $(function() { // 尝试获取播放器,等待几秒钟,如果没有播放器跳转到下节课继续 // 获取到播放器,激活防暂停 is_500(); logger('info', 'Init: Neumooc injected.'); pannel(); getAnswer(); if (isVideo() && !setting.justDoTest) { var tryInitTime = 0; var initInterval = setInterval(function() { if (isPlayerReady()) { clearInterval(initInterval); logger('info', 'Init: Success find video player.'); disableBlurPause(); waitVideo(); } else { tryInitTime++; logger('info', 'Init: Waiting video player.'); if ($(".fp-ui")) $(".fp-ui").click(); if (tryInitTime >= 6) { clearInterval(initInterval); logger('warn', 'Init: Can not find player, next outline.'); doTest(); } } }, 1000) } else { logger('info', 'Init: justDoTest is true or this is test.'); doTest(); } }) function is_500() { if (window.location.href == 'http://mooc.neumooc.com/course/play/init') { if (setting.courseUrl != '') { window.location.href == setting.courseUrl; } } } // Logger function logger(type, msg) { $(".info").text(msg); msg = "[NsumoocStar] " + msg; switch (type) { case 'warn': console.warn(msg); break; case 'log': console.log(msg); break; case 'info': console.info(msg); break; } } //面板 function pannel() { GM_addStyle('.mypanel {position: fixed;overflow: hidden;top: 100px;right: 10px; width: 300px;height: 200px;background-color: rgba(70, 196, 38, 0.6);z-index: 999999;border-radius: 5%;}'); GM_addStyle('.answers, .askMe, .info {height: 70px;line-height: 70px;flote:left;padding-left: 10px;;border-bottom: rgba(0, 0, 0, .2) dashed 2px;font-size: 13px;color:#fff}'); GM_addStyle('.askMe {display: none; }'); GM_addStyle('.askMe a {color:#fff !important}'); var html = '
' $("body").append(html); } //获取答案 function getAnswer() { var courseId = window.location.href.match(/courseId=(\S*)/)[1].split("&")[0]; if (localStorage.getItem('NeumoocCourseId=' + courseId)) { setting.answers = localStorage.getItem('NeumoocCourseId=' + courseId); setting.answers = JSON.parse(setting.answers); logger('info', 'getAnswer: Success find answers form the local.'); $(".answers").text('该课程有答案。'); } else { GM_xmlhttpRequest({ method: "GET", url: "http://neu.aisencode.cn/answer.php", headers: { "Content-Type": "application/json" }, onload: function(res) { if (res.status == 200) { var json = JSON.parse(res.responseText); if (json[courseId]) { setting.answers = json[courseId].answers; var strAnswer = JSON.stringify(json[courseId].answers); localStorage.setItem('NeumoocCourseId=' + courseId, strAnswer); logger('info', 'getAnswer: Success find answers form the server.'); } else { logger('info', 'getAnswer: not find answers form the server.'); $(".answers").text('暂时没有该课程的答案。'); $(".askMe").show(); } } else { logger('warn', 'getAnswer: can not find the server'); setting.answers = {}; setting.doTest = false; } } }); } } //测试是否通过 function testHasPassed() { var maxCorrectRate = Number($('#maxCorrectRate').text().slice(0, -1)); if (maxCorrectRate >= 80) { return true; } else { return false; } } //测试 function doTest() { var outlineId = $("li[class ^= 'childLi'][style = 'background-color:#eee;']")[0].classList[1]; //console.log(outlineId); var seq = $(".seq_html"); if (setting.answers[outlineId] && setting.doTest) { if (seq) { seq.click(); setTimeout(function() { if (!testHasPassed()) { var answers = setting.answers[outlineId].split(' '); $(".answers").text('该课程有答案。'); logger('info', 'doTest: Success find answers'); setTimeout(function() { var btn = $(".btn-primary")[0]; btn.click(); var num = 0; var timer = setInterval(function() { chooseAnswer(answers[num]); num++; var btnNext = $('.btn-primary:last'); btnNext.click() if (num == answers.length) { clearInterval(timer); var btnOk = $('.ui-dialog_art-autofocus'); var btnClose = $('.ui-dialog_art-button').children('button'); setTimeout(function() { btnOk.click(); }, setting.time); setTimeout(function() { btnClose.click(); logger('info', 'doTest: Finished, will go next Outline in 5s.'); //5s后点击下一节 setTimeout(function() { nextOutline() }, setting.time); }, setting.time + 1000); } }, setting.time); }, setting.time); } else { logger('info', 'doTest: the test already passed, will go next Outline in 5s.'); //5s后点击下一节 setTimeout(function() { nextOutline() }, setting.time); } }, 2000); } } else { logger('info', 'doTest: dotest is closed, will go next Outline in 5s.'); //5s后点击下一节 setTimeout(function() { nextOutline() }, setting.time); } } //选择 function chooseAnswer(answers) { $(".answers").text('本题答案为:' + answers); var btns = $("input[name='optionSelect']"); var btn; for (var i = 0; i < answers.length; i++) { switch (answers[i]) { case 'A': btn = btns[0]; break; case 'B': btn = btns[1]; break; case 'C': btn = btns[2]; break; case 'D': btn = btns[3]; break; case 'E': btn = btns[4]; break; case 'F': btn = btns[5]; break; case 'G': btn = btns[6]; break; case 'H': btn = btns[7]; break; } btn.click(); } } //是否为视频 function isVideo() { if ($('.fp-player').length >= 1) { return true; } else { return false; } } // 视频是否加载完成 function isPlayerReady() { if (window.flowPlayerObj) { //console.log(window.flowPlayerObj); return window.flowPlayerObj } else { return false; } } //解锁暂停 function disableBlurPause() { logger('info', 'disableBlurPause: disableBlurPause service started.'); var disableBlurPauseTimer = setInterval(function() { try { window.flowPlayerObj.play(); } catch (e) { clearInterval(disableBlurPauseTimer); logger('warn', 'Can not find player.'); } }, 500) } //等待视频完成 function waitVideo() { logger('info', 'waitVideo: waitVideo service started.'); var nextInterval = setInterval(function() { //如果播放完成 if (isFinished()) { clearInterval(nextInterval); doTest(); } else { logger('info', 'waitVideo: Waiting video finish.'); } }, 1000) } // 跟进播放进度 function isFinished() { return window.flowPlayerObj.finished; } // 跳转到下节课 function nextOutline() { var outlineId = $("input#outlineId").val(); var currentOutline = $('ul li.outl_' + outlineId); // 当前课程li var nextOutline; var next = currentOutline.nextAll(); if (next.length != 0) { nextOutline = $(next[0]); } else { var nextAll = currentOutline.parent('ul').parent('li').nextAll(); if (nextAll.length != 0) { nextOutline = $($(nextAll[0]).children("ul").children('li')[0]); } } var text = nextOutline.find('font').text(); var nextOutlineUrl = nextOutline.children("a").attr('href'); nextOutlineUrl ? window.location.href = nextOutlineUrl : logger('warn', 'Can not find next Outline.'); }