Greasy Fork

来自缓存

Greasy Fork is available in English.

学习强国

学习强国,自动答题,每题,每周,专题自动答题,本代码仅用于学习js所用,切勿用作违法用途,转载请注明出处。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

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

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         学习强国
// @namespace    http://www.mtnlmm.cn/
// @version      0.6.2
// @description  学习强国,自动答题,每题,每周,专题自动答题,本代码仅用于学习js所用,切勿用作违法用途,转载请注明出处。
// @author       馒头拿来摸摸
// @match        https://pc.xuexi.cn/points/exam-practice.html*
// @match        https://pc.xuexi.cn/points/exam-weekly-detail.html*
// @match        https://pc.xuexi.cn/points/exam-paper-detail.html*
// @match        https://pc.xuexi.cn/points/login.html*
// @grant        none
// @license      AGPL License
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
    function doit()
    {
        var nextAll=document.querySelectorAll(".ant-btn");

        var next=nextAll[0];

        if(nextAll.length==2)//俩按钮,说明有个按钮是交卷。
        {
            next=nextAll[1];
        }
        if(next.disabled)
        {


            document.querySelector(".tips").click();

            //所有提示
            var allTips=document.querySelectorAll("font[color=red]");


            //单选多选时候的按钮
            var buttons=document.querySelectorAll(".q-answer");

            //填空时候的那个textbox,这里假设只有一个填空
            var textboxs=document.querySelectorAll("input");
            //问题类型
            var qType= document.querySelector(".q-header").textContent;

            qType=qType.substr(0,3)

            switch(qType)
            {
                case"填空题":
                    //第几个填空
                    var mevent=new Event('input',{bubbles:true});
                    if( textboxs.length>1)//若不止是一个空
                    {
                        //填空数量和提示数量是否一致
                        if(allTips.length==textboxs.length)
                        {
                            for(let i=0;i< allTips.length;i++)//数量一致,则一一对应。
                            {
                                let tip=allTips[i];
                                let tipText=tip.textContent;
                                if(tipText.length>0)
                                {
                                    //通过设置属性,然后立即让他冒泡这个input事件.
                                    //否则1,setattr后,内容消失.
                                    //否则2,element.value=124后,属性值value不会改变,所以冒泡也不管用.
                                    textboxs[i].setAttribute("value",tipText);
                                    textboxs[i] .dispatchEvent(mevent);
                                  //  break;
                                }
                            }
                        }
                        else
                        {
                            //若填空数量和提示数量不一致,那么,应该都是提示数量多。

                            if(allTips.length>textboxs.length)
                            {
                                var lineFeed=document.querySelector('.line-feed').textContent;//这个是提示的所有内容,不仅包含红色答案部分。
                                let n=0;//计数,第几个tip。
                                for(let j=0;j<textboxs.length;j++)//多个填空
                                {

                                    let tipText=allTips[n].textContent;
                                    let nextTipText="";
                                    do{
                                     tipText+=nextTipText;
                                        if(n<textboxs.length-1)
                                        {
                                            n++;
                                            nextTipText=allTips[n].textContent;
                                        }
                                        else
                                        {
                                            nextTipText="结束了,没有了。";
                                        }
                                    }
                                    while(lineFeed.indexOf(tipText+nextTipText));

                                    textboxs[j].setAttribute("value",tipText);
                                    textboxs[j] .dispatchEvent(mevent);
                                }

                            }
                            else
                            {
                                //提示数量少于填空数量,不好拆分答案,想加自己加。
                            }

                        }
                    }
                    else if(textboxs.length==1)
                    {//只有一个空,直接把所有tips合并。
                        let tipText="";
                        for(let i=0;i< allTips.length;i++)
                        {
                            tipText += allTips[i].textContent;
                        }
                        textboxs[0].setAttribute("value",tipText);
                        textboxs[0] .dispatchEvent(mevent);
                        break;
                    }
                    else
                    {
                        //怕有没空白的情况。
                    }

                    break;
                case "多选题":
                    for(let js=0;js<buttons.length;js++)//循环选项列表。用来点击
                    {
                        let cButton=buttons[js];
                        for(let i=0;i< allTips.length;i++)//循环提示列表。
                        {
                            let tip=allTips[i];
                            let tipText=tip.textContent;
                            if(tipText.length>0)//提示内容长度大于0
                            {
                                let cButtonText=cButton.textContent;//选项按钮的内容
                                //循环对比点击
                                if(cButtonText.indexOf(tipText)>-1||tipText.indexOf(cButtonText)>-1)
                                {

                                    cButton.click();
                                    break;
                                }
                            }
                        }
                    }
                    break;

                case "单选题":                  
                    if(true)
                    {
                        //把红色提示组合为一条
                        let tipText="";
                        for(let i=0;i< allTips.length;i++)
                        {
                            tipText += allTips[i].textContent;
                        }

                        if(tipText.length>0)
                        {
                            //循环对比后点击
                            for(let js=0;js<buttons.length;js++)
                            {
                                let cButton=buttons[js];
                                let cButtonText=cButton.textContent;
                                //通过判断是否相互包含,来确认是不是此选项
                                if(cButtonText.indexOf(tipText)>-1||tipText.indexOf(cButtonText)>-1)
                                {
                                    cButton.click();
                                    break;
                                }
                            }
                        }
                    }
                    break;
                default:
                    break;
            }
            document.querySelector(".tips").click();
        }
        else
        {
            if(next.textContent!="再练一次"&&next.textContent!="再来一组"&&next.textContent!="查看解析"){
                next.click();
            }
        }

    };

    window.setInterval(doit, 3000);

})();