华理图书馆自动预约

自动完成明天三次的预约,为华理考研人准备

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

})

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址