- // ==UserScript==
- // @name NeumoocStar,neumooc,东软慕课,东软学院,自动完成视频+课后作业
- // @namespace http://tampermonkey.net/
- // @version 0.7
- // @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 neu.aisencode.cn
- // @requier https://code.jquery.com/jquery-3.1.1.min.js
- // @license MIT
- // ==/UserScript==
-
-
- var window = unsafeWindow;
- var $ = unsafeWindow.jQuery;
- var setting = {
- time: 5e3, // 默认响应速度为5秒,不建议小于3秒
- answers: {}, //如果有答案则会从服务器获取,如果没有则为空,如果自己有答案可加入
- //格式为 {"outl_D247C619659A4B12987B5E5D148E8065": "B B C","outl_6C746E61867D457FAA6218C73AAF5AC3": "C C B"}
- doTest: true, //默认开启做题
- justDoTest: false //只做题不看视频,默认关闭,开启为true
-
- };
-
-
-
- $(function() {
- logger('info', 'Init: Neumooc injected.');
- pannel();
- getAnswer();
- if (isVideo() && !setting.justDoTest) {
- var tryInitTime = 0;
- var initInterval = setInterval(function() {
- is_500();
- 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() {
- //<div class="error-text-2 bounceInDown animated">
- // <img src="/resources/img/500_bg.png">
- // </div>
- var err = $('.error-text-2');
- if (err.length != 0) {
- logger('warn', 'is_500: the web is 500.');
- window.location.reload();
-
- }
- }
-
- // 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:red !important}');
- var html = '<div class="mypanel">'
- html += '<div class="answers">answers</div>'
- html += '<div class="askMe">'
- html += '<a href="http://wpa.qq.com/msgrd?v=3&uin=201826658&site=qq&menu=yes" target="_blank">如果你有答案!点我联系作者添加。</a>'
- html += '</div>'
- html += '<div class="info">info</div>'
- html += '</div>'
- $("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: will do test in ' + setting.time + 'ms');
- setTimeout(function() {
- logger('info', 'doTest: test is doing.');
- var btn = $(".btn-primary")[0];
- btn.click();
- var num = 0;
- $(".answers").text('本题答案为:' + answers[num]);
- var timer = setInterval(function() {
- is_500();
- 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 ' + setting.time + 'ms');
- //5s后点击下一节
- setTimeout(function() { nextOutline() }, setting.time);
- }, setting.time + 1000);
-
- } else {
- $(".answers").text('本题答案为:' + answers[num]);
-
- }
- }, setting.time);
- }, setting.time);
-
-
-
- } else {
-
- logger('info', 'doTest: the test already passed, will go next Outline in ' + setting.time + 'ms');
- //5s后点击下一节
- setTimeout(function() { nextOutline() }, setting.time);
-
- }
- }, 2000);
-
- }
- } else {
- logger('info', 'doTest: dotest is closed or not a test, will go next Outline in ' + setting.time + 'ms');
- //5s后点击下一节
- setTimeout(function() { nextOutline() }, setting.time);
- }
-
-
-
- }
-
- //选择
- function chooseAnswer(answers) {
-
- var btns = $("input[name='optionSelect']");
- var btn;
- for (var i = 0; i < answers.length; i++) {
- try {
- 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;
- }
- } catch (err) {
- btn = btns[0];
- }
- 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 or had finished.');
- }