成都电大在线答题

成都电大在线答题辅助,可选手动单个和或自动批量。

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         成都电大在线答题
// @namespace    https://greasyfork.org/zh-CN/users/707063-genexy
// @version      202212091914
// @description  成都电大在线答题辅助,可选手动单个和或自动批量。
// @author       流浪的蛊惑
// @connect      ai.baidu.com
// @match        *://exam.cdou.edu.cn/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==

function yzdl(){
    let getBase64Image=function(image,ext){
        var canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;
        var context = canvas.getContext("2d");
        context.drawImage(image,0,0,image.width,image.height);
        // 这里是不支持跨域的
        var base64 = canvas.toDataURL("image/"+ext);
        return base64;
    };
    let delay=0;
    setInterval(function(){
        if(delay==1){//延时获取验证码
            let imgdat=getBase64Image(document.getElementById("imgValidCode"),"png");
            GM_xmlhttpRequest({
                method: "post",
                url: "https://ai.baidu.com/aidemo",
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded",
                    "referer":"https://ai.baidu.com/tech/ocr_others/webimage"
                },
                data: "type="+encodeURIComponent("https://aip.baidubce.com/rest/2.0/ocr/v1/webimage")+"&image="+encodeURIComponent(imgdat),
                onload: function(res){
                    let rec=JSON.parse(res.responseText);
                    console.log(rec);
                    if(rec.errno==0){
                        if(rec.data.words_result_num>0){
                            document.getElementById("validCode").value=rec.data.words_result[0].words;//验证码
                            var dlbtn=document.getElementsByTagName("a");
                            for(let a=0;a<dlbtn.length;a++){//查找登陆按钮
                                if(dlbtn[a].outerHTML.indexOf("javascript:Login()")>-1){
                                    dlbtn[a].click();
                                }
                            }
                        }
                    }
                }
            });
        }
        delay++;
    },1000);
}

(function() {
    'use strict';
    var zhs=document.getElementsByClassName("font12withe");
    if(zhs.length>0){
        let xszh=sessionStorage.getItem("账号数");
        if(xszh==null){
            let istr="{学号,密码}一行一个<br /><textarea id=\"xszh\" rows=\"10\" cols=\"50\">";
            istr+="</textarea><br /><input type=\"button\" value=\"确定\" onclick=\"var zhs=document.getElementById('xszh').value;";
            istr+="sessionStorage.setItem('账号',zhs);var zs=zhs.split('\\n').length;sessionStorage.setItem('账号数','0,'+zs);location.reload();\" />";
            zhs[0].innerHTML=istr;
        }else{
            var xsidx=xszh.split(",");
            if(xsidx[0]<xsidx[1]){
                var zh=sessionStorage.getItem("账号").split("\n");
                var dlyh=zh[xsidx[0]++].split(",");
                var xh=document.getElementById("account");
                var pwd=document.getElementById("password");
                xh.value=dlyh[0];
                pwd.value=dlyh[1];
                sessionStorage.setItem("账号数",xsidx[0]+","+xsidx[1]);
                yzdl(); //验证登陆
            }else{
                sessionStorage.removeItem("账号");
                sessionStorage.removeItem("账号数");
                location.reload();
            }
        }
    }
    if(window.location.pathname=="/framework/NewUserMainPage.aspx"){
        document.getElementById("sp_user_exam_center").click();
    }
    let i=0;
    if(window.location.pathname=="/exam/MyTestList.aspx"){
        let kcs=document.getElementById("PagingControl1_Nrl_fy1_1").innerText.trim();
        if(kcs>40){
            let x = document.getElementsByTagName("a");
            for(let a=0;a<x.length;a++){//修改登陆模式
                if(x[a].outerHTML.indexOf('>参加<')>-1){
                    var t = x[a].getAttribute("href").split("'");
                    x[a].setAttribute("href","/exam/exam/AttendExamNew.aspx?examUid="+t[1]+"&examArrangeUid="+t[3]);
                    x[a].setAttribute("target","_blank");
                    sessionStorage.setItem("作业"+(i++),"/exam/exam/AttendExamNew.aspx?examUid="+t[1]+"&examArrangeUid="+t[3]);
                }
            }
        }else{
            let ga=document.getElementById("PagingControl1_Nrl_fy1_2").getElementsByTagName("a");
            if(ga.length>0){
                ga[ga.length-1].click();
            }
        }
    }
    var zs=sessionStorage.getItem("作业数");
    if(zs==null && i>0){
        sessionStorage.setItem("作业数","0,"+i);
        var zy=sessionStorage.getItem("作业0");
        if(zy!=null){
            location.href=zy;
        }
    }
    var s = document.getElementById("lnkSubmitPaper");
    if(s!=null){//查找交卷按钮,生成配置脚本
        let ocl="var x = document.getElementsByTagName('input');";
        ocl+="for(a=0;a<x.length;a++){if(x[a].outerHTML.indexOf('hidStandardAnswer_')>-1){var str=x[a].getAttribute('value');var result='';";
        ocl+="var ramNum = parseInt(str.substring(0, 1));for(var i = 1; i < str.length; i += 4) {var asc = parseInt('0x' + str.substring(i, i + 4), 16);";
        ocl+="asc = asc - ramNum;result = result + (String.fromCharCode(asc));}var tid=x[a].getAttribute('id').split('_');var da=result.split('|');";
        ocl+="for(r=0;r<da.length;r++){var k=0;k=da[r].charCodeAt(0)-65;if(da[r]=='N'){k=0};if(da[r]=='Y'){k=1};var te=document.getElementById('Answer_'+tid[1]);";
        ocl+="if(te.getAttribute('type')=='text'){te.setAttribute('value',da[r]);}else{jscomCheckedQuestionAnswer('Answer_'+tid[1],k);}}SetQuestionAnswerStatus(tid[1],true);}}";
        ocl+="submitPaper(true);";
        s.setAttribute("onclick",ocl);
        let jj=0;
        setInterval(function(){
            switch(jj){
                case 0:
                    var tb=document.getElementById("divNavigatorPanel");
                    if(tb.outerHTML.length>110){
                        jj=1;
                        s.click();
                    }
                    break;
                case 1:
                    var cle=document.getElementsByClassName("Nsb_layer_btg");
                    if(cle.length>0){
                        jj=2;
                        let zyidx=sessionStorage.getItem("作业数").split(",");
                        if(zyidx[0]<zyidx[1]-1){
                            sessionStorage.removeItem("作业"+(zyidx[0]++));
                            sessionStorage.setItem("作业数",zyidx[0]+","+zyidx[1]);
                            let zy=sessionStorage.getItem("作业"+zyidx[0]);
                            if(zy!=null){
                                location.href=zy;
                            }
                        }else{
                            sessionStorage.removeItem("作业"+zyidx[0]);
                            sessionStorage.removeItem("作业数");
                            location.href="/";
                        }
                        break;
                    }
            }
        },1000);
    }
})();