Greasy Fork

来自缓存

Greasy Fork is available in English.

[ythere]一起MOOC做题吧~!(2020.10.17更新)

MOOC学习伙伴

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// getit
// ==UserScript==
// @name         [ythere]一起MOOC做题吧~!(2020.10.17更新)
// @name:en      [ythere]let's learning on MOOC~!
// @namespace    ythere
// @version      2020.10.17
// @description  MOOC学习伙伴
// @description:en  MOOC learning helper
// @author       ythere

// @include      *://www.cnmooc.org/*


// @require      http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js
// @grant        GM_openInTab
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// @grant        unsafeWindow
// @grant        GM_getResourceURL
// @grant        GM_getResourceText
// @license      MIT2.0
// ==/UserScript==
(function() {
    var test = true;
    'use strict'
    // alert('hello world');
    // Define region
    //-------------------------------------------------------------
    function addInfrastructure() {
        let style = document.createElement("style");

        style.appendChild(document.createTextNode(`
        #mywidget {
            position: relative;
            animation: mywidget_ani 2s 1;
            border-radius: 8px;
            background: transparent;
        }
        #mywidget a {
            position: absolute;
            left: -75px;
            transition: 0.3s;
            padding: 15px 30px 15px 15px;
            text-decoration: none;
            color: white !important;
            border-radius: 8px;
            font: 20px "Microsoft YaHei", SimHei, helvetica, arial, verdana, tahoma, sans-serif;
            min-width: 80px;
            text-align: right;
            white-space: nowrap;
        }
        #mywidget a:hover {
            left: -8px;
        }


        .hcwidget {
            position: relative;
            animation: mywidget_ani 2s 1;
            border-radius: 8px;
            background: transparent;
        }

        .hcwidget a {
            position: absolute;
            left: -75px;
            transition: 0.3s;
            padding: 15px 30px 15px 15px;
            text-decoration: none;
            color: white !important;
            border-radius: 8px;
            font: 20px "Microsoft YaHei", SimHei, helvetica, arial, verdana, tahoma, sans-serif;
            min-width: 80px;
            text-align: right;
            white-space: nowrap;
        }
        .hcwidget a:hover {
            left: -8px;
        }


        #vparse {
            background-color: #f44336;
        }
        .hcparse {
        	background-color: #f44336;
        }

        .test {
            background-color: #5FC074;
        }

        #myplaybutton {
            position: absolute;
            right: -8px;
            top: 14px;
            width: 0px;
            height: 0px;
            margin: 0px;
            border-width: 16px;
            border-style: solid;
            border-color: transparent transparent transparent white;
        }
        #testbutton {
            position: absolute;
            right: -8px;
            top: 14px;
            width: 0px;
            height: 0px;
            margin: 0px;
            border-width: 16px;
            border-style: solid;
            border-color: transparent transparent transparent white;
        }

        @keyframes mywidget_ani {
            0% {
                transform: rotate(0deg);
                left: 20px;
            }

            50% {
                transform: rotate(8deg);
                left: 500px;
            }

            100% {
                transform: rotate(-360deg);
                left: 0px;
            }
        }`));

        document.head.appendChild(style);
    }

	function pppp_id(input_kid) {
		return input_kid.parentElement.parentElement.parentElement.parentElement.id;
	}
    function test() {
        alert("hello");
    }

	function autoSelect() {

		console.log("开始尝试获取答案。");

		var is_init = true;
		var all_correct = false;
		var input_data =[];
		var got_answer = [];
		var output_error = [];
		var out_k = 0;
		var iter = true
		var url_get_ans = "https://" + document.domain + "/examSubmit/" + document.getElementById("courseOpenId").value + "/getExamPaper-" + examSubmitId + ".mooc?testPaperId=" + examTestPaperId + "&paperId=0&modelType=view";
		var success_flag = false;

		$.ajax({
		    type: 'POST',
		    url: url_get_ans,
		        success: function(data){
		        input_data = data;
		        success_flag = true;
		                console.log(data);
		                console.log(input_data);
		        },
		        error: function(){
		        console.log("初始网络请求失败,请重试运行脚本。");
		        },
		        async:false
		    });

		if (!input_data.examSubmit.submitContent) {
			var quizlist = document.querySelectorAll("[base_type=\"itt003\"]");
			var num = quizlist.length;
			for (var i = 0; i<num; i++) {
			    document.getElementById(quizlist[i].id).getElementsByTagName("a")[0].click();
			}
		    setTimeout(function(){document.getElementById("save_exam").click();},300);

		} else {
				var pointlist = $("practice-no clearfix");
			    var pre_submit_content = JSON.parse(input_data.examSubmit.submitContent);
			    var submit_content = [];
			    all_correct = true;
                var i;
			    for (i = 0; i< pre_submit_content.length; i++) {
			        submit_content.push(JSON.parse(pre_submit_content[i]));
			        if (submit_content[i].errorFlag == "right") {
			            if (!got_answer[i]) {
			                got_answer[i] = true;
			                console.log("第" + (i+1) +"题答案获取成功。");
			            }
			        } else {
			            all_correct = false;
			            var trans = parseInt(submit_content[i].userAnswer)+1;
			            trans.toString();
			            var pre_get = document.querySelector("[option_id=\""+submit_content[i].userAnswer+"\"] span a");
			            var aft_get = document.querySelector("[option_id=\""+trans+"\"] span a");
			            if (pre_get != null && aft_get != null) {
			            	var pre_chose = pppp_id(pre_get);
			            	var aft_chose = pppp_id(aft_get);
				            if (pre_chose == aft_chose)
				            {
				            	document.querySelector("[option_id=\""+trans+"\"] span a").click();
				           		console.log("错误题目:第" + (i+1) +"题");
				        	} else {
				        		document.getElementById(pre_chose).getElementsByTagName("a")[0].click();
				           		console.log("错误题目:第" + (i+1) +"题");
				        	}
			            } else {
				        	document.getElementById(pre_chose).getElementsByTagName("a")[0].click();
				         	console.log("错误题目:第" + (i+1) +"题");
				        }
			        }
			    }

			    if (all_correct) 
			    {	
			    	
			    	console.log("已经全选正确答案,请手动提交");
			    	alert("已经全选正确答案,请手动提交");
			    }
			    else
			    {
		    		setTimeout(function(){document.getElementById("save_exam").click();},300);
			    	console.log("已经自动暂存,请再次打开测试并运行脚本");
			    }
		}
	}

	function showError() {

		console.log("开始尝试获取答案。");

		var is_init = true;
		var all_correct = true;
		var input_data =[];
		var got_answer = [];
		var output_error = [];
		var out_k = 0;
		var iter = true
		var url_get_ans = "https://" + document.domain + "/examSubmit/" + document.getElementById("courseOpenId").value + "/getExamPaper-" + examSubmitId + ".mooc?testPaperId=" + examTestPaperId + "&paperId=0&modelType=view";
		var success_flag = false;

		$.ajax({
		    type: 'POST',
		    url: url_get_ans,
		        success: function(data){
		        input_data = data;
		        success_flag = true;
		                console.log(data);
		                console.log(input_data);
		        },
		        error: function(){
		        console.log("初始网络请求失败,请重试运行脚本。");
		        },
		        async:false
		    });

		if (!input_data.examSubmit.submitContent) {
			var quizlist = document.querySelectorAll("[base_type=\"itt003\"]");
			var num = quizlist.length;
			for (var i = 0; i<num; i++) {
				// quizlist[i].getElementsByTagName("span").click();
				// document.getElementById(now_quiz).getElementsByTagName("span").click();
				document.querySelector("[class=\"practice-no clearfix\"]").children[i].style.color = 'red';
			}
		} else {
			var pointlist = $("practice-no clearfix");
			var pre_submit_content = JSON.parse(input_data.examSubmit.submitContent);
		    var submit_content = [];
		    all_correct = true;

			for (var j = 0; j< pre_submit_content.length; j++) {
			    submit_content.push(JSON.parse(pre_submit_content[j]));
			    if (submit_content[j].errorFlag != "right") {
			      	// var now_quiz = pppp_id(document.querySelector("[option_id=\""+submit_content[j].userAnswer+"\"] span a"));
			       	all_correct = false;
					document.querySelector("[class=\"practice-no clearfix\"]").children[i].style.color = 'red';

			       	// document.getElementById(now_quiz).getElementsByTagName("span").click();
				   	// document.querySelector("[class=\"practice-no clearfix\"]").children[j].style.color = 'red';
				}			   
			}
			if (all_correct) 
			{	
			  	console.log("已经全选正确答案,请手动提交");
			   	alert('已经全选正确答案,请手动提交');
			}
		}
	}

    function tricks() {
        window.addEventListener('message', function(event) {
            if (~event.origin.indexOf('chinese-elements.com')) {
                var intervalId = window.setInterval(function() {
                    $("#aside-nav").hide();
                    window.clearInterval(intervalId)
                }, 1000 * 2);
            } else {
                return;
            }
        });
        const im = /chinese-elements.com/i;
        if (im.test(self.location.href)) {
            var intervalId = window.setInterval(function() {
                $("#aside-nav").hide();
                window.clearInterval(intervalId);
                try {
                    var frame = document.getElementById("player");
                    if (frame && frame.hasOwnProperty('contentWindow')) {
                        var iframeWindow = frame.contentWindow;
                        iframeWindow.postMessage("tricks", "*");
                    }

                } catch (e) {
                    console.log(e);
                }
            }, 1000 * 2);
        }
    }

    //-------------------------------------------------------------
    let playurl = window.location.href;
    let rArray = playurl.split('?');
    let cWeb = rArray[0];
    const vSite = /m1907.cn/i;
    //-------------------------------------------------------------

    // Little tricks
    tricks();
    if (vSite.test(cWeb)) {
        window["alert"] = function(e) {};
        return;
    }
    //------------------------------------------------------------

    //add a button to current website.
    const vWebsites = new Array();
    vWebsites[0] = /cnmooc.org/i;
    vWebsites.every((item) => {
        if (item.test(cWeb)) {
            addInfrastructure();
            var autoButton = $(`
            <div id="mywidget_1" class = "hcwidget" href='javascript:void(0)' target='_blank' style="z-index:9999; position:fixed;left:0px;top:270px;">
                <a href="#" id="vparse">❀快乐学习<div id="myplaybutton_1"></div></a>
            </div>
            `);
            var ShowerrorButton = $(`
            <div id="mywidget_2" class = "hcwidget" href='javascript:void(0)' target='_blank' style="z-index:9999; position:fixed;left:0px;top:350px;">
                <a href="#" class = "hcparse">❀快乐批改<div id="myplaybutton_2"></div></a>
            </div>
            `);
            $("body").append(autoButton);
            $("body").append(ShowerrorButton);	
            // $:快速查找元素
            // 向body中添加元素

            // bind onclick event

            $("#mywidget_1").click(function() {
				autoSelect();
            });
			$("#mywidget_2").click(function() {
                showError();
            });
            return false;
        }
        return true;
    });

})();