您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动完成明天三次的预约,为华理考研人准备
// ==UserScript== // @name 华理图书馆自动预约 // @namespace Violentmonkey Scripts // @match http://mjyylib.ncst.edu.cn/book/more/type/4/lib/11 // @match http://mjyylib.ncst.edu.cn/home/book/more/lib/11/type/4/day/* // @match http://mjyylib.ncst.edu.cn/book/notice/act_id/***/type/4/lib/11 // @match http://mjyylib.ncst.edu.cn/book/notice/act_id/**/type/4/lib/11 // @grant none // @version 1.3.13 // @grant GM_setValue // @grant GM_getValue // @grant GM_listValues // @author 野生铁丝 // @description 自动完成明天三次的预约,为华理考研人准备 // @license MIT // @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js // ==/UserScript== var num=0 // day为1为明天的预约,为2为今天预约 day=1 // 默认情况,单人预约请修改u1,并将twopeople变量置零。 var twopeople=0 u1= "12345" p1="1234@12345" u2 = "12345" p2="1234@12345" userID = u1 password=p1 // 如果是两个个人的话请为1. if(twopeople){ // 如果存储为空,则注入数据 if(GM_listValues().length == 0){ GM_setValue("changePeople", 1) } if(GM_getValue("changePeople")){ GM_setValue("changePeople", 0) userID = u1 password=p1 } else{ GM_setValue("changePeople", 1) userID = u2 password=p2 } } // 我是真的搞不懂,这里动态链接的目的是什么,就不怕数据重复吗 // 其实真正牛的是对这个网页的完全包装,验证码等关键要素不变,但是将连接和ajax从页面中抽离出来避免过多的跳转而浪费时间,直接搞一个新的页面布局。 // 不知道我修改cookie用户相关的信息,是否可以保留登录信息,以至于很久不用登陆,从而将网页真正的程序化,获得登录状态的cookie后,其他服务器或者电脑能够登陆吗 function geturllist(){ // 难道这里的时间算法有问题?为什么凌晨1点登录,动态路由不会变 dayNum = Math.ceil((new Date() - new Date(new Date().getFullYear().toString())) / (24 * 60 * 60 * 1000)) + 1; console.log(dayNum) if(day==1){ var num1 = dayNum - 198 var num2 = dayNum + 16 var num3 = dayNum + 595 } else if(day==2) { var num1 = dayNum - 199 var num2 = dayNum + 15 var num3 = dayNum + 594 } temurl1 = "http://mjyylib.ncst.edu.cn/book/notice/act_id/" + num1 + "/type/4/lib/11" temurl2 = "http://mjyylib.ncst.edu.cn/book/notice/act_id/" + num2 + "/type/4/lib/11" temurl3 = "http://mjyylib.ncst.edu.cn/book/notice/act_id/" + num3 + "/type/4/lib/11" temurl=temurl1 console.log(temurl1,temurl2,temurl3) urllist = new Array(temurl1, temurl2, temurl3) } // // 设置cookie在当天指定时间点过期 // function setCookie(name,value,Deadline){ // // 获取当前日期对象 // var curDate = new Date(); // // 获取当前日期对应的时间戳 // var curTime = curDate.getTime(); // // 获取指定时间的时间戳 // var endTime = convertTime(curDate,Deadline); // // 计算出指定时间与当前时间的时间差 // var disTime = endTime - curTime; // // 设置cookie过期时间 // document.setCookie = name + '=' + value + ';expires=' + disTime; // console.log("cookie!") // } // 获取指定时间的时间戳 // function convertTime(nowDate,Deadline){ // // 分割参数Deadline // var _dateArr = Deadline.split(':'); // // 分别获取参数中对应的时、分、秒 // var hours = parseInt(_dateArr[0]); // var minutes = parseInt(_dateArr[1]); // var seconds = parseInt(_dateArr[2]); // // 设置对应时分秒 // nowDate.setHours(hours); // nowDate.setMinutes(minutes); // nowDate.setSeconds(seconds); // // 获取当前天中指定时分秒对应的毫秒数 // var result = Date.parse(nowDate); // return result; // } // 用于实现自动跳转 // 应该写一个函数,如果是今天早少要预约的界面,先判断是不是有cookie,没有cookie刷新一下,才对。这样就避免了页面重复出现验证码的问题。 function logKey(e) { num+=1 setTimeout(function () { if(num==4){ console.log("finish!") var tembt=document.getElementsByClassName("ui-dialog-autofocus")[0].click(); // 执行登录之后进行cookie的状态设定,防止随着页面的刷新出现新的登录弹窗。进行页面的切换 setTimeout(function () { // var temurl1="http://mjyylib.ncst.edu.cn/book/notice/act_id/83/type/4/lib/11" window.location = temurl1 },1600) } }, 100) } function getCookie (name) { if (document.cookie.length > 0) { var start = document.cookie.indexOf(name + '=') if (start !== -1) { start = start + name.length + 1 let end = document.cookie.indexOf(';', start) if (end === -1) end = document.cookie.length return unescape(document.cookie.substring(start, end)) } } return '' } // 用于日期格式化,以后可能用来指定日期预约 // function fix(num, length) { // return ('' + num).length < length ? ((new Array(length + 1)).join('0') + num).slice(-length) : '' + num; // } function isInArray(arr,value){ for(var i = 0; i < arr.length; i++){ if(value === arr[i]){ return true; } } return false; } function closeWin(){ window.opener=null; window.open('','_self'); window.close(); } function simulateClick(){ var test = window.location.href; if(test==temurl1){ console.log("准备进行早上预约") // 首先进行验证,防止出现两次验证码 var cookie=getCookie("userid") if(cookie!=""){ var signUpbt=document.querySelector('#signUp'); console.log(signUpbt.style.display) if(signUpbt.style.display!="none"){ signUpbt.click(); var temobject1=document.getElementsByClassName("ui-dialog-button")[0] var bt1=temobject1.getElementsByTagName('button')[1] bt1.click();} // 预约完成之后进行中午的预约 setTimeout(function () { window.location = temurl2 },210) } // 如何避免重复刷新呢,就怕用户直接从早上的网址进入(因为用户可能输出错误的验证码,导致页面跳转),导致页面重复刷新,还得进行时间上的判读。关键还是得判断今天到底登没登陆。 // else{ // location.reload(); // } } else if(test==temurl2){ console.log("准备进行中午预约") var signUpbt=document.querySelector('#signUp'); console.log(signUpbt.style.display) if(signUpbt.style.display!="none"){ signUpbt.click(); var temobject1=document.getElementsByClassName("ui-dialog-button")[0] var bt1=temobject1.getElementsByTagName('button')[1] bt1.click(); } setTimeout(function () { window.location = temurl3 },200) } else if(test==temurl3){ console.log("准备进行晚上预约") var signUpbt=document.querySelector('#signUp'); console.log(signUpbt.style.display) if(signUpbt.style.display!="none"){ signUpbt.click(); var temobject1=document.getElementsByClassName("ui-dialog-button")[0] var bt1=temobject1.getElementsByTagName('button')[1] bt1.click(); } setTimeout(function () { closeWin() },200) } } // 下次获取元素 var input=document.querySelector('#input'); $(function () { console.log("finish!") geturllist() // setCookie('logstate','true','24:00:00'); // 进行cookie的读取,用cookie来判断是否执行下面的操作 var cookie=getCookie("userid") console.log(cookie) if(cookie!=""){ console.log("have") // 需要跳转页面 // var myDate = new Date(); // var year=myDate.getFullYear(); // var mon=fix(myDate.getMonth()+1, 2); // var day=fix(myDate.getDate()+1, 2); // console.log(year,mon,day) // var timestr=year+"-"+mon+"-"+day // var temurl="http://mjyylib.ncst.edu.cn/home/book/more/lib/11/type/4/day/"+timestr // var test = window.location.href; // if(test==temurl){ // console.log("准备进行预约") // } // else{ // console.log("跳转") // window.location = temurl // } // 登录之后,进行页面跳转,如果在跳转之后的页面,进行预约操作 var test = window.location.href; // var urllist=new Array("http://mjyylib.ncst.edu.cn/book/notice/act_id/83/type/4/lib/11","http://mjyylib.ncst.edu.cn/book/notice/act_id/297/type/4/lib/11","http://mjyylib.ncst.edu.cn/book/notice/act_id/876/type/4/lib/11") var havestate = isInArray(urllist,test) if(havestate){ console.log("不需要跳转") // 这个时候开始调用点击预约函数 simulateClick() } else{ console.log("需要跳转") // var temurl="http://mjyylib.ncst.edu.cn/book/notice/act_id/83/type/4/lib/11" setTimeout(function () { window.location = temurl }, 100) } } else{ setTimeout(function () { document.getElementsByClassName("login-btn")[0].click(); //$(".login-btn,.login_click")[0].css("background-color","yellow").trigger("click") var temobject1=document.getElementsByClassName("login_username")[0] var temobject2=temobject1.getElementsByTagName('input')[0].value=userID var temobject3=document.getElementsByClassName("login_pwd")[0] var temobject4=temobject3.getElementsByTagName('input')[0].value=password var temobject5=document.getElementsByClassName("login_check")[0] var temobject6=temobject5.getElementsByTagName('input')[0] // temobject6.onchange=function(){ // console.log("变化了"); // } temobject6.focus() temobject6.addEventListener('keydown', logKey); }, 100) } })