您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
【使用前先看介绍/有问题可反馈】深圳大学抢领航讲座脚本 (Grab Lecture in SZU):可用于在深圳大学抢领航讲座。
// ==UserScript== // @name Grab Lecture in SZU // @name:cn 深圳大学抢领航讲座脚本 // @namespace http://tampermonkey.net/ // @version 0.7.4 // @description 【使用前先看介绍/有问题可反馈】深圳大学抢领航讲座脚本 (Grab Lecture in SZU):可用于在深圳大学抢领航讲座。 // @author cc // @match http://lecture.szu.edu.cn/* // @require https://cdn.bootcss.com/jquery/3.4.1/jquery.js // @require https://greasyfork.org/scripts/422854-bubble-message.js // @noframes // @grant GM_setValue // @grant GM_getValue // ==/UserScript== (function() { 'use strict' let config = null let bm = new BubbleMessage() bm.config.cmap.info = '#009688' bm.config.width = 300 function getStartTime () { let now = new Date() let year = now.getFullYear() let month = now.getMonth() + 1 let day = now.getDate() let startTime = new Date(`${year}-${month}-${day} 12:30:00`) return startTime.getTime() } function rushLecture () { $.ajax({ url: 'http://lecture.szu.edu.cn/tLectureSignUp/list?page=1&limit=10', type: 'GET', }).then(res => { if (res.code === 0) { let availableLectures = res.data.filter(lecture => Date.now() < new Date(lecture.lectureEndTime)) Promise.all(availableLectures.map(lecture => { return $.ajax({ url: `http://lecture.szu.edu.cn/lectureClassroomSignUp/list?page=1&limit=20&lectureId=${lecture.id}`, type: 'GET', }).then(res => { return res.code === 0 ? res.data.filter(room => room.remainSeats > 0) : [] }) })).then(res => { let availableRooms = [] res.forEach(rooms => availableRooms = availableRooms.concat(rooms)) availableRooms = availableRooms.filter(room => config.campus.indexOf(room.campus) >= 0) if (availableRooms.length === 0) { bm.message({ type: 'warning', message: '无可抢讲座', duration: 1500, }) } else { Promise.all(availableRooms.map(room => { return $.ajax({ url: `http://lecture.szu.edu.cn/tSelectLecture/addItem?lectureClassroomId=${room.id}&lectureId=${room.lectureId}&classroomId=${room.classroomId}`, type: 'POST', }).then(res => { return res }) })).then(res => { bm.message({ type: 'info', message: '抢领航讲座已完成,请刷新页面查看结果', duration: 3000, }) console.info(res) }) } }) } else { bm.message({ type: 'error', message: '请求失败', duration: 3000, }) } }) } function setSelect () { let div = document.createElement('div') div.style = 'display: inline-flex; height: 100%; align-items: center; margin-left: 10px;' let select = document.createElement('select') select.name = 'campus' let optionYHCH = document.createElement('option') optionYHCH.value = '粤海校区/沧海校区' optionYHCH.innerHTML = optionYHCH.value let optionLH = document.createElement('option') optionLH.value = '丽湖校区' optionLH.innerHTML = optionLH.value select.appendChild(optionYHCH) select.appendChild(optionLH) select.addEventListener('change', function (event) { config.campusIndex = event.target.selectedIndex config.campus = event.target.value.split('/') GM_setValue('config', config) }) div.appendChild(select) let nextItem = document.querySelector('.layui-nav.layui-layout-right') nextItem.parentNode.insertBefore(div, nextItem) } function loadConfig () { let select = document.querySelector('select[name=campus]') config = GM_getValue('config') if (!config) { config = { campus: select.options[select.selectedIndex].value.split('/'), campusIndex: select.selectedIndex, } GM_setValue('config', config) } else { select.selectedIndex = config.campusIndex } } window.onload = function () { setSelect() loadConfig() let currentTime = Date.now() let startTime = getStartTime() if (currentTime < startTime) { let deltaTime = startTime - currentTime bm.message({ type: 'info', message: `准备于 ${parseInt(deltaTime / 1000)} 秒后开抢`, duration: 3000, }) setTimeout(rushLecture, deltaTime) } else { bm.message({ type: 'info', message: `已经过了抢课时间`, duration: 3000, }) } } })()