您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
进入教务网络管理系统点击退选即可导出指定格式课表
// ==UserScript== // @name 河科大课表导出 // @namespace 木偶ll // @version 1.2 // @description 进入教务网络管理系统点击退选即可导出指定格式课表 // @author 木偶ll // @match *.haust.edu.cn/wsxk/stu_txjg.aspx // @home-url https://greasyfork.org/zh-CN/scripts/412798 // @grant unsafeWindow // @grant GM_xmlhttpRequest // ==/UserScript== (function () { 'use strict'; var body1 = document.querySelector('body'); body1.removeAttribute('onselectstart'); body1.removeAttribute('oncontextmenu'); body1.removeAttribute('ondragstart'); body1.removeAttribute('onsource'); var classKc = []; var classKcSimple = []; var courseTimeObj = { 一: '1', 二: '2', 三: '3', 四: '4', 五: '5', 六: '6', 七: '7' }; var courseTimeArr = ['零', '一', '二', '三', '四', '五', '六', '日']; var kcName; var teacher; var kcAdress; var tables = document.querySelectorAll('table'); var hang = tables[3].rows; var teacherStr; for (var i = 2, num = 0; i < hang.length; i++, num++) { kcAdress = hang[i].querySelectorAll('td')[10]; if ((kcAdress.innerHTML.indexOf('在线课程') != -1) || kcAdress.innerHTML == '<br>') { continue; } kcName = hang[i].querySelector('#showD').textContent; var courseName = kcName.substring((kcName.indexOf(']') + 1), kcName.length); teacherStr = ''; teacher = hang[i].querySelectorAll('td')[4].querySelectorAll('a'); for (var k = 0; k < teacher.length; k++) { teacherStr += teacher[k].innerText + '/'; } var teachers = teacherStr.substring(0, teacherStr.length - 1); var flag = 0; var zhoushuEnd = 0; var zhoushuStart = 0; for (var n = 0; n < (kcAdress.innerHTML.split('星期')).length - 1; n++) { flag = kcAdress.innerHTML.indexOf('星期', flag) + 2; var xqStr = kcAdress.innerHTML.substring(flag, flag + 1); var ksjsSrt = kcAdress.innerHTML.indexOf('[', flag) + 1; var ksjsSrtTemp = kcAdress.innerHTML.indexOf('-', flag) + 1; var jsjsSrt = kcAdress.innerHTML.indexOf('节', flag); var startTime = kcAdress.innerHTML.substring(ksjsSrt, ksjsSrt + 1); var endTime = kcAdress.innerHTML.substring(ksjsSrtTemp, jsjsSrt); var courseAdressStartFlag = kcAdress.innerHTML.indexOf('/', flag) + 1; var courseAdressEndFlag = kcAdress.innerHTML.indexOf('<br>', flag); var courseAdress = kcAdress.innerHTML.substring(courseAdressStartFlag, courseAdressEndFlag); zhoushuEnd = kcAdress.innerHTML.indexOf('周', zhoushuEnd + 1); zhoushuStart = kcAdress.innerHTML.indexOf('[', zhoushuEnd - 6) + 1; var zhoushu = kcAdress.innerHTML.substring(zhoushuStart, zhoushuEnd); classKc[num] = new kcFunction(courseName, courseTimeObj[xqStr], startTime, endTime, teachers, courseAdress, zhoushu); num++; } num--; } function kcFunction(kcmc, xingqi, ksjs, jsjs, laoshi, didian, zhoushu) { this.courseName = kcmc; this.week = xingqi; this.startTime = ksjs; this.endTime = jsjs; this.teachers = laoshi; this.courseAdress = didian; this.zhoushu = zhoushu; }; function SimpleTimeTablee(kcmc, laoshi, xingqi, ksjs, jsjs, didian, zhoushu) { this.courseName = kcmc; this.teachers = laoshi; this.week = courseTimeArr[xingqi]; this.classTime = ksjs + '-' + jsjs; this.courseAdress = didian; this.zhoushu = zhoushu; }; for (let i = 0; i < classKc.length; i++) { classKcSimple[i] = new SimpleTimeTablee(classKc[i].courseName, classKc[i].teachers, classKc[i].week, classKc[i].startTime, classKc[i].endTime, classKc[i].courseAdress, classKc[i].zhoushu); } var divs = document.createElement("div"); divs.style = 'text-align:center;background-color:#f4fffb'; document.body.insertBefore(divs, document.querySelector('table')); var SimpleBtn = document.createElement("button"); SimpleBtn.innerHTML = '导出Simple格式课表'; SimpleBtn.addEventListener("click", SimpleExport); SimpleBtn.style = 'margin:0 auto;font-size:30px;color:red'; SimpleBtn.style.height = '60px'; SimpleBtn.style.width = '322px' document.querySelector('div').appendChild(SimpleBtn); var btn = document.createElement("button"); btn.innerHTML = '导出WakeUp格式课表'; btn.addEventListener("click", dataExport); btn.style = 'margin:0 auto;font-size:30px;color:red'; btn.style.height = '60px'; btn.style.width = '322px' document.querySelector('div').appendChild(btn); var strSimple = ''; for (let i = 0; i < classKcSimple.length; i++) { for (let item in classKcSimple[i]) { strSimple += `${classKcSimple[i][item]},`; } strSimple = strSimple.substring(0, strSimple.length - 1) + '\n'; } var str = '课程名称,星期,开始节数,结束节数,老师,地点,周数\n'; for (let i = 0; i < classKc.length; i++) { for (let item in classKc[i]) { str += `${classKc[i][item]},`; } str = str.substring(0, str.length - 1) + '\n'; } var myDate = new Date(); var grade, fileName; if ((myDate.getMonth() + 1) >= 2 & (myDate.getMonth() + 1) <= 8) { grade = myDate.getFullYear() - document.querySelectorAll('table')[2].rows[0].innerText.substring(8, 12); fileName = '大' + courseTimeArr[grade] + '下学期课表' } else { grade = myDate.getFullYear() - document.querySelectorAll('table')[2].rows[0].innerText.substring(8, 12) + 1; fileName = '大' + courseTimeArr[grade] + '上学期课表' } function dataExport() { let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str); let link = document.createElement("a"); link.href = uri; link.download = fileName + '.csv'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } function SimpleExport() { let uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(strSimple); let link = document.createElement("a"); link.href = uri; link.download = fileName + '.txt'; document.body.appendChild(link); link.click(); document.body.removeChild(link); } })();