Greasy Fork is available in English.

gzhmtScript

建议使用firefox浏览器 不要使用IE浏览器 教务系统IP:10.10.12.78(内网) 域名:jw.gzhmt.edu.cn.(外网)

// ==UserScript==
// @name         gzhmtScript
// @namespace    https://github.com/Gccc9
// @version      1.1
// @require      https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js
// @description  建议使用firefox浏览器 不要使用IE浏览器 教务系统IP:10.10.12.78(内网) 域名:jw.gzhmt.edu.cn.(外网)
// @node         功能1:拦截了登陆界面的弹窗,将错误提示显示在页面上,而不是弹窗
// @node         功能2:选体育课页面中,添加了抢课按钮,位于普通选择按钮的右侧,点击即可进行抢课。
// @node         功能3:选修课页面中,添加了抢课面板,可以进行跨页选择,在想要抢的课的最后一栏点击按钮“添加到抢课”即可添加到面板 而后可以点击提交
// @node         目前webkit内核的浏览器使用此脚本时会出现一些bug,暂未解决
// @node         选修课面板的判断需要做处理,等到抢课的时候即可进行改正。
// @author       Gccc9
// @match        *://10.10.12.78/*
// @match        *://jw.gzhmt.edu.cn/*
// @node         2019.1.7
// @grant        none
// @run-at       document-start
// ==/UserScript==

var baseURL = window.location.host;//用于判断是内网还是外网 10.10.12.78是内网   访问jw.gzhmt.edu.cn为外网。
var path = window.location.host+window.location.pathname;
var helpString = 	[ '功能1:拦截登陆界面的弹窗,将错误提示显示在页面上.',
				   				   '功能2:选体育课页面中,普通选课按钮的右侧添加了抢课按钮,点击即可进行抢课.',
				   				   '功能3:选修课页面中添加了抢课面板,可以进行跨页选择,加入面板后即可进行提交.',
								   '<strong>注意   :  选修课中的筛选面板不要进行改动!!</strong>',
                                   '<strong>版本号: 1.0   作者: Gccc9  日期: 2019.1.7</strong>'];

var alertMessage;//弹框弹出的信息
//登陆界面
if( path ==  baseURL || path == baseURL+"/default2.aspx" ){
    window.alert = function(message){
        alertMessage = message;
    };
}
//首页
if( path == baseURL+"/xs_main.aspx"){
    window.alert = function(message){
        alertMessage = message;
    };
    //首页因插件与jquery有兼容问题 故改用原生js实现
    window.onload = function(){
        let second = 8; //窗口关闭的秒数
        let intervalEndFlag;//用于记录渐入是否结束了的
        let div = document.createElement("div");
        div.innerHTML = "<div style='display:block;position:fixed;top:240px;right:600px;opacity:0'  id='tipContent'>"
                                                                                +	  "<div style='background:linear-gradient(#eaf4fe,#dbebfb,#dfecfc,#eaf4fe,#dbebfb,#eaf4fe,#bbd2f2);width:350px;padding:10px;border:3px #87a7d7 solid;border-radius:5px;'>"
                                                                                +		"<ul id='helpUl'>"
                                                                                +		"</ul>"
                                                                                +	  "</div>"
                                                                                +"</div>";
        document.getElementById("mainDiv").appendChild(div);
        if( alertMessage != undefined ){
            function fadeIn(element,speeded){
                if(element.style.opacity != 0  ){
                    let num = 10;
                    intervalEndFlag = setInterval(function(){
                        num--;
                        element.style.opacity = num/10;
                        if(num <= 0) {
                            clearInterval(intervalEndFlag);
                        } },speeded);
            }};
            function fadeOut(element,speeded){
                if(element.style.opacity !=1){
                    let num = 0;
                    let st = setInterval(function(){
                        num++;
                        element.style.opacity = num / 10 ;
                        if(num >= 10) {
                            clearInterval(st);
                        } },speeded);
                } };
            document.getElementById("helpUl").innerHTML= "<li>"+ alertMessage+"</li>"
                                                         +"<li style='text-align:center'><strong>"+second+"秒后自动关闭</strong></li>";
            fadeOut(document.getElementById("tipContent"),30);
            let loop = setInterval(function(){
                if( intervalEndFlag == undefined && second != 0 ){
                    second--;
                    document.getElementById("helpUl").innerHTML= "<li>"+ alertMessage+"</li>"
                                                         +"<li style='text-align:center'><strong>"+second+"秒后自动关闭</strong></li>";
                }
                if( second == 0 ){
                    clearInterval(loop);
                }
            },1000);
            let loopSecond= setInterval(function(){
                if( second == 0 ){
                    fadeIn(document.getElementById("tipContent"),30);
                    clearInterval(loopSecond);
                }
            });
        }
        for( let i = 0 ; i < document.querySelectorAll("a[target='zhuti']").length ; i++ ){
            document.querySelectorAll("a[target='zhuti']")[i].addEventListener("click",function(){
                document.querySelector("#tipContent").style.opacity = 0;
            });
        }


    };
}


$(document).ready(function(){
	//登录时清空data数据
	$("#Button1").click(function(){
		sessionStorage.clear();
	});
	//登录页面
    if( path == baseURL+"/" || path == baseURL+"/default2.aspx"){
		//屏蔽登陆弹框 改为在提交登陆界面下面添加提示
        $("#Button1").siblings().last().css("color","red").css("margin-left","20px");
        $("#txtSecretCode").css("font-size","12px");
        $("#icode").css("left","159px");
        $("#icodems").remove();
        //$("#Button1").siblings().last().prepend(alertMessage);
		//脚本说明
		$(".login_right").css("position","relative");
		$(".login_right").append("<input type='button' value='脚本说明' id='scriptHelp' class='button' style='position:absolute;top:45px;right:140px;' >"
										+"<div style='display:none;position:absolute;top:40px;right:-200px'  id='helpContent'>"
                                        +   "<div style='position:relative'>"
                                        +     "<div style='position:absolute;left:-19px;top:10px;width:0px;height:0px;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-left: 10px solid transparent;border-right: 10px solid #87a7d7;' id='helpBorder'></div>"
                                        +     "<div style='position:absolute;left:-15px;top:10px;width:0px;height:0px;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-left: 10px solid transparent;border-right: 10px solid #e2effc;' id='helpInside'></div>"
										+	  "<div style='background:linear-gradient(#eaf4fe,#dbebfb,#dfecfc,#eaf4fe,#dbebfb,#eaf4fe,#bbd2f2);width:300px;padding:10px;border:3px #87a7d7 solid;border-radius:5px;'>"
										+		"<ul>"
										+		"</ul>"
										+	  "</div>"
                                        +   "</div>"
										+"</div>");
		for(var i=0; i<helpString.length;i++){
			$("#helpContent ul").append("<li style='text-align:left;'>"+helpString[i]+"</li>");
		}
		$("#scriptHelp").click(function(){
			$("#helpContent").fadeToggle();
		});
        $("#Button1").parent().append("<div style='display:none;position:absolute;'  id='tip'>"
                                        + "<div style='position:relative'>"
                                        +   "<div style='position:absolute;left:-19px;top:5px;width:0px;height:0px;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-left: 10px solid transparent;border-right: 10px solid #87a7d7;'></div>"
                                        +   "<div style='position:absolute;left:-15px;top:5px;width:0px;height:0px;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-left: 10px solid transparent;border-right: 10px solid #dbebfb;'></div>"
										+	"<div style='background:linear-gradient(#eaf4fe,#dbebfb,#dfecfc,#eaf4fe,#dbebfb,#eaf4fe,#bbd2f2);width:110px;padding:10px;border:3px #87a7d7 solid;border-radius:5px;'>"
										+		"<ul>"
										+		"</ul>"
										+	"</div>"
                                        + "</div>"
										+"</div>");
        if( alertMessage != undefined ){
            $("#tip ul").append("<li style='text-align:left;'>"+alertMessage+"<li>");
            if( alertMessage.startsWith("用户名") ){
                $("#tip").css("top","95px").css("right","10px");
            }else if( alertMessage.startsWith("密码")){
                $("#tip").css("top","128px").css("right","10px");
            }else if( alertMessage.startsWith("验证码")){
                $("#tip").css("top","170px").css("right","10px");
            }
            $("#tip").fadeIn();
            setTimeout(function(){
                $("#tip").fadeToggle();
            },4500);
        };
    }

    //公选课抢课
    if( path == baseURL+"/xf_xsqxxxk.aspx"){
		$(".toolbox").css("position","relative");
		//脚本说明
		$(".toolbox").append("<input type='button' value='脚本说明' id='scriptHelp' class='button' style='position:absolute;top:58px;right:42px;' >"
					 				+"<div style='display:none;position:absolute;top:50px;right:120px'  id='helpContent'>"
                                        +   "<div style='position:relative'>"
                                        +     "<div style='position:absolute;right:-19px;top:10px;width:0px;height:0px;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-right: 10px solid transparent;border-left: 10px solid #87a7d7;'></div>"
                                        +     "<div style='position:absolute;right:-15px;top:10px;width:0px;height:0px;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-right: 10px solid transparent;border-left: 10px solid #e2effc;'></div>"
										+	  "<div style='background:linear-gradient(#eaf4fe,#dbebfb,#dfecfc,#eaf4fe,#dbebfb,#eaf4fe,#bbd2f2);width:300px;padding:10px;border:3px #87a7d7 solid;border-radius:5px;'>"
										+		"<ul>"
										+		"</ul>"
										+	  "</div>"
                                        +   "</div>"
										+"</div>");
		for(i=0; i<helpString.length;i++){
			$("#helpContent ul").append("<li style='text-align:left;'>"+helpString[i]+"</li>");
		}
		$("#scriptHelp").click(function(){
			$("#helpContent").fadeToggle();
		});


        $("tr.datelisthead:first").append("<td>添加到抢课列表</td>");
        $("tbody:first>tr[class!='datelisthead']").append("<td><input type='button' class='button' value='添加到抢课'></td>");
        $(".searchbox:eq(1)").after("<div style='position:absolute;left:700px;top:5px;width:620px;'>"
                                    +  "<select style='width:99%;height:99%;' size='3' onchange='' id='selectCreazy'>"
                                    +  "</select>"
                                    +  "<input type='button' class='button' value='提交' style='margin-right:50px;margin-top:4px;' id='postSessionStorage'>"
                                    +  "<input type='button' class='button' value='清空' style='margin-right:50px;margin-top:4px;' id='delSessionStorage'>"
                                    +  "<p style='position:absolute;left:405px;top:54px;' id='tip'><p>"
                                    +"</div>");
        var sessionData1 = JSON.parse(sessionStorage.getItem("data1"));
        var sessionData2 = JSON.parse(sessionStorage.getItem("data2"));

        if( sessionData1 != null ){
            $("select[id='selectCreazy']").append("<option>"+sessionData1.sourceName+"---"+sessionData1.teacher+"---"+sessionData1.time+"---"+sessionData1.place+"---"+sessionData1.college+"</option>");
            $("select[id='selectCreazy']").children("option:last").attr("value",sessionData1.postValue);
        }
        if( sessionData2 != null ){
            $("select[id='selectCreazy']").append("<option>"+sessionData2.sourceName+"---"+sessionData2.teacher+"---"+sessionData2.time+"---"+sessionData2.place+"---"+sessionData2.college+"</option>");
            $("select[id='selectCreazy']").children("option:last").attr("value",sessionData2.postValue);
        }
        function sendData(){
            let __EVENTTARGET = $("input[name='__EVENTTARGET']").val();
            let __EVENTARGUMENT = $("input[name='__EVENTARGUMENT']").val();
            let interval1;
            let interval2;
            let runFlag1 = false;
            let runFlag2 = false;
            sessionData1 = JSON.parse(sessionStorage.getItem("data1"));
            sessionData2 = JSON.parse(sessionStorage.getItem("data2"));

            if( sessionData1 != null ){
                runFlag1 = true;
                $("#delSessionStorage").hide();
                $("#postSessionStorage").val("停止抢课");
                $("#postSessionStorage").unbind("click");
                $("#postSessionStorage").click(function(){
                    $("#postSessionStorage").val("提交");
                    if( runFlag1 == true ){
                        runFlag1 = false;
                        clearInterval(interval1);
                    }
                    if( runFlag2 == true ){
                        runFlag2 = false;
                        clearInterval(interval2);
                    }
                    $("#delSessionStorage").show();
                    $("#postSessionStorage").click(sendData);
                });
                let choose = sessionData1.postValue;
                let data = {
                            "__EVENTTARGET":__EVENTTARGET,
                            "__EVENTARGUMENT":__EVENTARGUMENT,
                            "__VIEWSTATE":sessionData1.viewstate,
                            "Button1":$("#Button1").val(),
                            "ddl_kcgs":"",
                            "ddl_kcxz":"",
                            "ddl_sksj":"",
                            "ddl_xqbs":"1",
                            "ddl_ywyl":$("#ddl_ywyl").children("option[selected='selected']").val(),
                            "dpkcmcGrid:txtChoosePage":sessionData1.pageCount,
                            "dpkcmcGrid:txtPageSize":"15",
                            "TextBox1":""
                        };
                data[choose]="on";
                interval1 = setInterval( function(){
                    $.ajax({
                        url:$("#xsyxxxk_form").attr("action"),
                        data:data,
                        headers:{
                            "Upgrade-Insecure-Requests":"1",
                            "X-Requested-With":"",
                            "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
                        },
                        type:"POST",
                        contentType: 'application/x-www-form-urlencoded;charset=GBK',
                        datatype:"TEXT",
                        success:function(data,status,xhr){
                            if( data.split("alert(\'")[1].split("\');</script>")[0] == "现在不是选课时间!!"){
                                $("#tip").text(data.split("alert(\'")[1].split("\');</script>")[0]);
                            }else if( data.split("alert(\'")[1].split("\');</script>")[0] == "您已经修过该课程!不能再选"){
                                $("#tip").text(data.split("alert(\'")[1].split("\');</script>")[0]);
                                clearInterval(interval1);
                                runFlag1 = false;
                                if( runFlag2 == false || interval2 == undefined ){
                                    $("#postSessionStorage").val("提交");
                                    $("#postSessionStorage").unbind("click");
                                    $("#postSessionStorage").click(sendData);
                                    $("#delSessionStorage").show();
                                }

                            }else{
                                $("#tip").text(data.split("alert(\'")[1].split("\');</script>")[0]);
                                clearInterval(interval1);
                                runFlag1 = false;
                                if( runFlag2 == false || interval2 == undefined){
                                    $("#postSessionStorage").val("提交");
                                    $("#postSessionStorage").unbind("click");
                                    $("#postSessionStorage").click(sendData);
                                    $("#delSessionStorage").show();
                                }
                            }
                        },
                        error:function(data,status,xhr){
                            $("#tip").text("( ̄▽ ̄)\"客官,您的网络似乎不太行");
                        }
                    });
                },500);

            }

            if( sessionData2 != null ){
                runFlag2 = true;
                let choose = sessionData2.postValue;
                let data = {
                            "__EVENTTARGET":__EVENTTARGET,
                            "__EVENTARGUMENT":__EVENTARGUMENT,
                            "__VIEWSTATE":sessionData2.viewstate,
                            "Button1":$("#Button1").val(),
                            "ddl_kcgs":"",
                            "ddl_kcxz":"",
                            "ddl_sksj":"",
                            "ddl_xqbs":"1",
                            "ddl_ywyl":$("#ddl_ywyl").children("option[selected='selected']").val(),
                            "dpkcmcGrid:txtChoosePage":sessionData2.pageCount,
                            "dpkcmcGrid:txtPageSize":"15",
                            "TextBox1":""
                        };
                data[choose]="on";
                interval2 = setInterval( function(){
                    $.ajax({
                        url:$("#xsyxxxk_form").attr("action"),
                        data:data,
                        type:"POST",
                        headers:{
                            "Upgrade-Insecure-Requests":"1",
                            "X-Requested-With":"",
                            "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
                        },
                        contentType: 'application/x-www-form-urlencoded;charset=GBK',
                        datatype:"TEXT",
                        success:function(data,status,xhr){
                            if( data.split("alert(\'")[1].split("\');</script>")[0] == "现在不是选课时间!!"){
                                $("#tip").text(data.split("alert(\'")[1].split("\');</script>")[0]);
                            }else if( data.split("alert(\'")[1].split("\');</script>")[0] == "您已经修过该课程!不能再选"){
                                $("#tip").text(data.split("alert(\'")[1].split("\');</script>")[0]);
                                clearInterval(interval2);
                                runFlag2 = false;
                                if( runFlag1 == false){
                                    $("#postSessionStorage").val("提交");
                                    $("#postSessionStorage").unbind("click");
                                    $("#postSessionStorage").click(sendData);
                                    $("#delSessionStorage").show();
                                }
                            }else{
                                $("#tip").text(data.split("alert(\'")[1].split("\');</script>")[0]);
                                clearInterval(interval2);
                                runFlag2 = false;
                                if( runFlag1 == false){
                                    $("#postSessionStorage").val("提交");
                                    $("#postSessionStorage").unbind("click");
                                    $("#postSessionStorage").click(sendData);
                                    $("#delSessionStorage").show();
                                }
                            }
                        },
                        error:function(data,status,xhr){
                            $("#tip").text("( ̄▽ ̄)\"客官,您的网络似乎不太行");
                        }
                    });
                },500);
            }
        };

        //给"抢课提交"增加监听
        $("#postSessionStorage").click(sendData);



        //给“清空”增加监听
        $("#delSessionStorage").click(function(){
            sessionStorage.clear();
            $("select[id='selectCreazy']").empty();
            $("#tip").text("");
        });

        //给“添加到抢课”增加监听器
        $("td > input[type='button']").click(function(e){
            if( $("select[id='selectCreazy']").children().length < 2 ){
               let sourceName = $(e.target).parent().parent().children("td:eq(1)").text();
               let teacher = $(e.target).parent().parent().children("td:eq(3)").text();
               let time = $(e.target).parent().parent().children("td:eq(4)").attr("title");
               let place = $(e.target).parent().parent().children("td:eq(5)").text();
               let college = $(e.target).parent().parent().children("td:eq(14)").text();
               let postValue =$(e.target).parent().parent().children("td:first").children("input").attr("name");
               let json = {
                   'postValue':postValue,
                   'pageCount':$("#dpkcmcGrid_lblCurrentPage").text(),
                   'sourceName':sourceName,
                   'teacher':teacher,
                   'time':time,
                   'place':place,
                   'college':college,
                   'viewstate':$("input[name='__VIEWSTATE']").val()
               };
               $("select[id='selectCreazy']").append("<option>"+sourceName+"---"+teacher+"---"+time+"---"+place+"---"+college+"</option>");
               $("select[id='selectCreazy']").children("option:last").attr("value",postValue);
               if( sessionStorage.getItem('data1') == null ){
                   sessionStorage.setItem('data1',JSON.stringify(json));
               }else{
                   sessionStorage.setItem('data2',JSON.stringify(json));
               }
            }
        });
    }

    //体育课抢课
    if( path == baseURL+"/xstyk.aspx"){
		//脚本说明
		$("body").append("<input type='button' value='脚本说明' id='scriptHelp' class='button' style='position:absolute;top:58px;right:42px;' >"
					 				+"<div style='display:none;position:absolute;top:50px;right:120px'  id='helpContent'>"
                                        +   "<div style='position:relative'>"
                                        +     "<div style='position:absolute;right:-18px;top:10px;width:0px;height:0px;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-right: 10px solid transparent;border-left: 10px solid #87a7d7;'></div>"
                                        +     "<div style='position:absolute;right:-15px;top:10px;width:0px;height:0px;border-top: 10px solid transparent;border-bottom: 10px solid transparent;border-right: 10px solid transparent;border-left: 10px solid #e2effc;'></div>"
										+	  "<div style='background:linear-gradient(#eaf4fe,#dbebfb,#dfecfc,#eaf4fe,#dbebfb,#eaf4fe,#bbd2f2);width:300px;padding:10px;border:3px #87a7d7 solid;border-radius:5px;'>"
										+		"<ul>"
										+		"</ul>"
										+	  "</div>"
                                        +   "</div>"
										+"</div>");
		for(i=0; i<helpString.length;i++){
			$("#helpContent ul").append("<li style='text-align:left;'>"+helpString[i]+"</li>");
		}
		$("#scriptHelp").click(function(){
			$("#helpContent").fadeToggle();
		});

        function sendData(){
            $("#button3").siblings().last().text("-----开始抢课-----");
            $("#button4").val("停止抢课");
            $("#button4").unbind("click");
            $("#button4").click(function(){
                clearInterval(interval);
                $("#button4").val("开始抢课");
                $("#button4").unbind("click");
                $("#button4").click(sendData);
            });
            let interval = setInterval( function(){ //clearInterval(interval);用于终止
                $.ajax({
                    url:$("#Form1").attr("action"),
                    data:{ __EVENTTARGET:$("input[name='__EVENTTARGET']").val(),
                          __EVENTARGUMENT:$("input[name='__EVENTARGUMENT']").val(),
                          __VIEWSTATE:$("input[name='__VIEWSTATE']").val(),
                          button3:"%D1%A1%B6%A8%BF%CE%B3%CC",
                          DropDownList1:$("#DropDownList1").children("option[selected='selected']").val(),
                          ListBox1:$("#ListBox1").children("option[selected='selected']").val(),
                          ListBox2:$("#ListBox2").children("option[selected='selected']").val()
                         },
                    type:"POST",
                    contentType: 'application/x-www-form-urlencoded;charset=GBK',
                    datatype:"TEXT",
                    success:function(data,status,xhr){
                        if( data.split("alert(\'")[1].split("\');</script>")[0] == "只能选1门体育课!!"){
                            $("#Form1").submit();
                        }else if( data.split("alert(\'")[1].split("\');</script>")[0] == "请选择对应值!!"){
                            $("#button3").parent().children("p").text(data.split("alert(\'")[1].split("\');</script>")[0]);
                            clearInterval(interval);
                            $("#button4").val("开始抢课");
                            $("#button4").unbind("click");
                            $("#button4").click(sendData);
                        }else{
                            $("#button3").parent().children("p").text(data.split("alert(\'")[1].split("\');</script>")[0]);
                        }
                    },
                    error:function(data){
                        $("#button3").parent().children("p").text("( ̄▽ ̄)\"客官,您的网络似乎不太行");
                    }
                });
            },300);

        }

        $("#button3").parent().append("<input id='button4' class='button' value='开始抢课' style='width:60px'>");
        $("#button3").parent().append("<p style='display:inline;margin-left:30px;'></p>");
        $("#button4").click(sendData);
    }

});