// ==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);
}
});