您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Auto check in and check out!
// ==UserScript== // @name autoCheckIn&Out // @namespace http://tampermonkey.net/ // @version 0.8.4 // @icon https://myoa.sjfood.us/favicon.ico // @description Auto check in and check out! // @author JunerLee // @match *://myoa.sjfood.us/Schedule/MySchedule // @grant none // ==/UserScript== (function() { 'use strict'; const hour = 60*60*1000; const minute = 60*1000; const second = 1000; var frequency = Math.floor(Math.random()*5+1); window.setInterval(autoCheck,frequency*minute); function autoCheck() { if(isMealTime(8,15,45)||isMealTime(11,15,75)) { var now = new Date().getTime(); if(isMealTime(8,15,45)){console.log(timestampToString(now) +' It\'s Breakfast time');}//could delete if(isMealTime(11,15,75)){console.log(timestampToString(now) +' It\'s Lunch time');}//could delete var btnCheckIn = $("#btnCheckIn"); var btnCheckOut = $("#btnCheckOut"); if(!isCheckOut()&&!isCheckIn()) { //未签出签入 btnCheckOut.click(); var now = new Date().getTime(); setTimeout(function () { if($('#popupWindow p').text().indexOf('过期') < 0) { //成功签出才进行状态设置,如果出现超时则重新登陆 localStorage.setItem('checkStatus', 1); //checkStatus为1表示已签出 if(isMealTime(8,15,45)) { localStorage.setItem('breakfastCheckOutTime',now); recordCheckInAndOutHistory('out','breakfast'); } else { localStorage.setItem('lunchCheckOutTime',now); recordCheckInAndOutHistory('out','lunch'); } $('input.confirm_no').click(); console.log(timestampToString(new Date().getTime())+' Check out');//could delete } else { recordExpiredTimes(); $('input.confirm_no').click(); logout(); } }, 2000); if(isMealTime(8,15,45) && typeof hadCheckInBreakfast==="undefined") { console.log(timestampToString(new Date().getTime())+' Waiting to check in breakfast');//could delete var randomBreakfastTime = (18+Math.floor(Math.random()*6+1))*minute + Math.floor((Math.random()*59+1)*second); localStorage.setItem('randomBreakfastTime',randomBreakfastTime); setTimeout(function () { btnCheckIn.click(); afterCheckInToDo('breakfast'); }, randomBreakfastTime); //19mins--24mins let hadCheckInBreakfast = true; } else if (isMealTime(11,15,75) && typeof hadCheckInLunch==="undefined") { console.log(timestampToString(new Date().getTime())+' Waiting to check in lunch');//could delete var randomLunchTime = (45+Math.floor(Math.random()*9+1))*minute + Math.floor((Math.random()*59+1))*second; localStorage.setItem('randomLunchTime',randomLunchTime); setTimeout(function () { btnCheckIn.click(); afterCheckInToDo('lunch'); }, randomLunchTime); //46mins--55mins let hadCheckInLunch = true; } } else if(isCheckOut() && !isCheckIn() && localStorage.getItem('hasBeenReloadWhenCheckIn') == 1) { //签入时遇到遇到登陆过期问题 btnCheckIn.click(); localStorage.setItem('checkStatus', 0); localStorage.setItem('hasBeenReloadWhenCheckIn', 0); setTimeout(function () { $('input.confirm_no').click(); console.log(timestampToString(new Date().getTime())+' Close the check in alert');//could delete }, 2000); } else if(isCheckOut() && !isCheckIn() && ((getEndOfMealTime()+3*minute)<=(new Date().getTime()))) { btnCheckIn.click(); afterCheckInToDo(isMealTime(8,15,45)?'breakfast':'lunch'); } } else { if(isNeedToReentry()) { logout(); } else if (isNeedToRefresh()) { refresh(); } console.log(timestampToString(new Date().getTime())+' I\'m waiting for breakfast or lunch time.'); } } function isCheckIn() { return $("#btnCheckIn").prop("disabled"); } function isCheckOut() { return $("#btnCheckOut").prop("disabled"); } function isMealTime(startHour,startMinute,duringMinute) { var now = Date.parse(new Date()); var beginOfToday = Date.parse(new Date(new Date(new Date().toLocaleDateString()).getTime())); var beginOfMealTime = beginOfToday + startHour*hour + startMinute*minute; var endOfMealTime = beginOfMealTime + duringMinute*minute; return (beginOfMealTime<now && now<endOfMealTime && !isSunday()); } //是否周末 function isSunday() { var today = new Date(); return (today.getDay() === 0); } //判断是否需要注销重新登陆 function isNeedToReentry() { if($('#popupWindow p').text().indexOf('过期') >= 0) { return true; } $('div.layui-layer-dialog').children().each(function() { if($(this).text().indexOf('过期') >= 0) { return true; } }); return false; } //是否需要刷新页面 function isNeedToRefresh() { var now = Date.parse(new Date()); var startOfToday = Date.parse(new Date(new Date(new Date().toLocaleDateString()).getTime())); //07:45-07:52 var start1 = startOfToday + 7*hour + 45*minute; var end1 = start1 + 7*minute; var isNeed1 = (start1<now && now<end1); //10:50-10:57 var start2 = startOfToday + 10*hour + 50*minute; var end2 = start2 + 7*minute; var isNeed2 = (start2<now && now<end2); //07:00-07:07 var start3 = startOfToday + 7*hour; var end3 = start3 + 7*minute; var isNeed3 = (start3<now && now<end3); return (isNeed1||isNeed2||isNeed3); } //刷新 function refresh() { location.reload(); } //注销 function logout() { $('.navbar-right a')[2].click(); //注销 } //记录打卡时间 function recordCheckInAndOutHistory(checkType,mealType) { var dateTime = timestampToString(new Date().getTime()-4000); if(!localStorage.getItem('checkInAndOutHistory')) { localStorage.setItem('checkInAndOutHistory','[]'); } var checkInAndOutHistory = JSON.parse(localStorage.getItem('checkInAndOutHistory')); if(checkType == 'out') { if(mealType == 'breakfast'){ var check = {"breakfastOut":dateTime,"breakfastIn":""}; } else { var check = {"lunchOut":dateTime,"lunchIn":""}; } checkInAndOutHistory.push(check); } else { if(isMealTime(8,15,45)){ checkInAndOutHistory[(checkInAndOutHistory.length-1)]['breakfastIn'] = dateTime; } else { checkInAndOutHistory[(checkInAndOutHistory.length-1)]['lunchIn'] = dateTime; } } localStorage.setItem('checkInAndOutHistory',JSON.stringify(checkInAndOutHistory)); } function recordExpiredTimes() { if(!localStorage.getItem('expiredTimes')) { localStorage.setItem('expiredTimes', 1); } else { localStorage.setItem('expiredTimes', parseInt(localStorage.getItem('expiredTimes'))+1); } } //时间戳(毫秒)转字符串日期时间 function timestampToString(inputTime) { var date = new Date(inputTime); var y = date.getFullYear(); var m = date.getMonth() + 1; m = m < 10 ? ('0' + m) : m; var d = date.getDate(); d = d < 10 ? ('0' + d) : d; var h = date.getHours(); h = h < 10 ? ('0' + h) : h; var minute = date.getMinutes(); var second = date.getSeconds(); minute = minute < 10 ? ('0' + minute) : minute; second = second < 10 ? ('0' + second) : second; return y + '-' + m + '-' + d+' '+h+':'+minute+':'+second; } function afterCheckInToDo(mealType) { setTimeout(function () { if($('#popupWindow p').text().indexOf('过期') < 0) { //成功签入才进行状态设置,如果出现超时则重新登陆 console.log(timestampToString(new Date().getTime())+' Check in '+ mealType);//could delete localStorage.setItem('checkStatus', 0); //checkStatus为0表示已签入 localStorage.setItem('hasBeenReloadWhenCheckIn', 0); //hasBeenReloadWhenCheckIn为0表示在签入时没有遇到登陆过期的问题 $('input.confirm_no').click(); console.log(timestampToString(new Date().getTime())+' Close the check in '+ mealType +' alert');//could delete recordCheckInAndOutHistory('in',mealType); } else { recordExpiredTimes(); localStorage.setItem('hasBeenReloadWhenCheckIn', 1); //hasBeenReloadWhenCheckIn为1表示在签入时遇到登陆过期重新登陆过 $('input.confirm_no').click(); logout(); } }, 2000); } function getEndOfMealTime() { if (isMealTime(8,15,45)) { return parseInt(localStorage.getItem('breakfastCheckOutTime')) + parseInt(localStorage.getItem('randomBreakfastTime')); } else { return parseInt(localStorage.getItem('lunchCheckOutTime')) + parseInt(localStorage.getItem('randomLunchTime')); } } })();