您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
用于获取东秦科技楼空教室表的js脚本
// ==UserScript== // @name 科技楼空教室表 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 用于获取东秦科技楼空教室表的js脚本 // @author Juns // @match *://jwxt.neuq.edu.cn* // @match http://jwxt.neuq.edu.cn/eams/homeExt.action // @match http://jwxt.neuq.edu.cn/eams/homeExt.action* // @match http://jwxt.neuq.edu.cn/eams/classroom/apply/free!search.action // @match http://jwxt.neuq.edu.cn/eams/classroom/apply/free.action // @icon https://www.google.com/s2/favicons?sz=64&domain=neuq.edu.cn // @grant none // @license MIT // ==/UserScript== (function () { "use strict"; // 添加button,以及样式 //#region const button = document.createElement("button"); button.innerText = "1111"; button.style.position = "absolute"; button.style.bottom = "60px"; button.style.right = "30px"; button.innerText = "科技楼空教室表"; button.style.setProperty("--color", "#560bad"); button.style.fontFamily = "inherit"; button.style.display = "inline-block"; button.style.width = "9em"; button.style.height = "2.6em"; button.style.lineHeight = "2.5em"; button.style.margin = "20px"; button.style.overflow = "hidden"; button.style.border = "2px solid var(--color)"; button.style.transition = "color .5s"; button.style.zIndex = "3"; button.style.fontSize = "17px"; button.style.borderRadius = "6px"; button.style.fontWeight = "500"; button.style.color = "var(--color)"; button.style.backgroundColor = "#fff"; const before = document.createElement("div"); before.style.content = '""'; before.style.position = "absolute"; before.style.zIndex = "-1"; before.style.background = "var(--color)"; before.style.height = "150px"; before.style.width = "200px"; before.style.borderRadius = "50%"; button.appendChild(before); before.style.top = "100%"; before.style.left = "100%"; before.style.transition = "all .7s"; button.addEventListener("mouseover", () => { before.style.top = "-30px"; before.style.left = "-30px"; button.style.color = "#f2f5f7"; }); button.addEventListener("mouseout", () => { before.style.top = "100%"; before.style.left = "100%"; button.style.color = "var(--color)"; }); button.addEventListener("mousedown", () => { button.style.setProperty("--color", "#3a0ca3"); before.style.background = "#3a0ca3"; before.style.transition = "background 0s"; }); button.addEventListener("mouseup", () => { button.style.setProperty("--color", "#560bad"); before.style.background = "var(--color)"; before.style.transition = "background .7s"; }); document.body.appendChild(button); //#endregion let emptyClassroomString = ""; //空教室表的字符串 let str = ""; // 时间戳转时间函数 function timestampToTime(timestamp) { let date = new Date(timestamp); let Y = date.getFullYear() + "-"; let M = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1) + "-"; let D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " "; let h = (date.getHours() < 10 ? "0" + date.getHours() : date.getHours()) + ":"; let m = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(); return Y + M + D + h + m; } let timeStamp = Date.now(); //现在的时间戳 let emptyClassroomTableExportTime = timestampToTime(timeStamp); // timeStamp += 8 * 60 * 60 * 1000; //东八区的时间戳 timeStamp += 24 * 60 * 60 * 1000; // ! 下一天的时间戳 // !如果要获取今天的空教室表就注释掉上面这一行 let date = new Date(timeStamp); //对应的时间 let yyy = date.getFullYear(); let mmm = date.getMonth() + 1; //从0开始 let ddd = date.getDate(); //几号 let order = date.getDay(); //0是周日 // 第一行显示年月日,周几 emptyClassroomString += `${yyy}.${mmm}.${ddd}日 周`; let week = ["日", "一", "二", "三", "四", "五", "六"]; emptyClassroomString += week[order]; emptyClassroomString += "\n\n"; // 补零函数 function pad(time) { return (time < 10 ? "0" : "") + time; } // 设置楼,时间,以及一些选项 function setOptions() { let trs = document.querySelector("#actionForm").querySelectorAll("tr"); // console.log(trs[2]); let sel = trs[2].querySelector("select"); sel.value = "9"; // 设置教学楼为科技楼 // console.log(trs[4]); let tds = trs[4].querySelectorAll("td"); // console.log(tds[1]); let ins = tds[1].querySelectorAll("input"); ins[0].value = `${yyy}-${pad(mmm)}-${pad(ddd)}`; ins[1].value = `${yyy}-${pad(mmm)}-${pad(ddd)}`; // 2023.2.28日:好像格式改了,改成了03/01这样的 // ins[0].value = `${yyy}-${mmm}-${ddd}`; // ins[1].value = `${yyy}-${mmm}-${ddd}`; } //点击查询按钮 function btnClick() { let trs = document.querySelector("#actionForm").querySelectorAll("tr"); // console.log(trs[5]); let btn = trs[5].querySelector("input"); // console.log(btn); btn.click(); } //替换汉字函数 function RemoveChinese(strValue) { if (strValue != null && strValue != "") { let reg = /科[ ]*技[ ]*楼/; let reg2 = /具体安排以开课部门通知为准\s*/g; let reg3 = /自[ ]*主[ ]*学[ ]*习[ ]*室/; return strValue .replace(reg, "") .replace(reg2, "") .replace(reg3, "自习室"); } else return ""; } // 获取当前表格内的数据 function getClassroomString() { let rows = document .querySelector("#grid15320024301_data") .querySelectorAll("td"); // 获取表格数据 // console.log(rows); // console.log(rows[1]); let t = []; //存储数据 for (let i = 1; i < rows.length; i += 6) { let x = RemoveChinese(rows[i].innerText); t.push(x); // t.push(rows[i].innerText); } t.sort(); //升序排序 str = ""; for (let i = 0; i < t.length; i++) { //对数据进行换行处理 if (i >= 1) { if (t[i][0] != t[i - 1][0]) str += "\n"; } str += t[i] + " "; } console.log(str); emptyClassroomString += str; //s是之后的总的字符串 } // 查询a-b小节的空教室 function emptyClassroomQuery(a, b) { let x = document .querySelector("#roomApplyTimeTypeTd") .querySelectorAll("input"); // 获取dom x[0].value = a; x[1].value = b; btnClick(); console.log(a + "-" + b + "节:"); setTimeout(getClassroomString, 1000); //设置延时1s emptyClassroomString = emptyClassroomString + a + "-" + b + "节:\n"; } //todo 之后用异步重构一下,现在能跑就不管了吧😂 function f(time) { setOptions(); if (time > 6000) { return; } else { setTimeout(() => { time += 1000; //每次间隔1s // console.log(time); if (time == 1000) { emptyClassroomQuery(1, 2); button.innerText = "正在查询..."; button.addEventListener("mouseover", () => { button.style.color = "#6f42c1"; }); } if (time == 2000) { emptyClassroomString = emptyClassroomString + "\n\n"; emptyClassroomQuery(3, 4); } if (time == 3000) { emptyClassroomString = emptyClassroomString + "\n\n"; emptyClassroomQuery(5, 6); } if (time == 4000) { emptyClassroomString = emptyClassroomString + "\n\n"; emptyClassroomQuery(7, 8); } if (time == 5000) { emptyClassroomString = emptyClassroomString + "\n\n"; emptyClassroomQuery(9, 10); } if (time == 6000) { emptyClassroomString = emptyClassroomString + "\n\n"; emptyClassroomQuery(1, 8); } if (time == 7000) { const newS = emptyClassroomString + "\n\n——不洗碗工作室" + "\n\n导出时间:" + emptyClassroomTableExportTime; console.log(newS); button.innerText = "点击文本即复制"; showText(newS); // console.log("——ACM技术部"); } f(time); }, time); } } // f(0); //自动执行 button.addEventListener("click", () => { if ( window.location.href !== "http://jwxt.neuq.edu.cn/eams/classroom/apply/free.action" ) { window.location = "http://jwxt.neuq.edu.cn/eams/classroom/apply/free.action"; f(0); } else { f(0); } }); // 文本框 function showText(emptyClassroomString) { const textDiv = document.createElement("div"); textDiv.style.fontSize = "17px"; textDiv.style.borderRadius = "20px"; textDiv.style.background = "#f5f5f5"; textDiv.style.padding = "1.8rem"; textDiv.style.transition = "0.5s ease-out"; textDiv.style.overflow = "visible"; textDiv.style.position = "absolute"; textDiv.style.top = "20px"; textDiv.style.left = "20px"; textDiv.style.cursor = "pointer"; textDiv.style.backgroundColor = "rgba(255, 255, 255, 0.25)"; textDiv.style.backdropFilter = "blur(6px)"; textDiv.style.border = "1px solid rgba(255, 255, 255, 0.18)"; textDiv.style.boxShadow = "rgba(142, 142, 142, 0.19) 0px 6px 15px 0px"; textDiv.innerText = emptyClassroomString; textDiv.addEventListener("mouseover", () => { textDiv.style.borderColor = "#008bf8"; }); textDiv.addEventListener("mouseout", () => { textDiv.style.border = "1px solid rgba(255, 255, 255, 0.18)"; textDiv.style.boxShadow = "rgba(142, 142, 142, 0.19) 0px 6px 15px 0px"; }); textDiv.addEventListener("click", () => { copyText(emptyClassroomString); alert("已经复制到剪切板!"); }); document.body.appendChild(textDiv); } function copyText(emptyClassroomString) { let tempInput = document.createElement("textarea"); emptyClassroomString = emptyClassroomString.replace(/\n/g, "\r\n"); tempInput.value = emptyClassroomString; document.body.appendChild(tempInput); tempInput.select(); document.execCommand("copy"); document.body.removeChild(tempInput); } })();