Greasy Fork is available in English.

河科大课表导出

进入教务网络管理系统点击退选即可导出指定格式课表

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