Greasy Fork

Greasy Fork is available in English.

河科大课表导出

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         河科大课表导出
// @namespace    木偶ll
// @version      1.2
// @description  进入教务网络管理系统点击退选即可导出指定格式课表
// @author       木偶ll
// @match        *.haust.edu.cn/wsxk/stu_txjg.aspx
// @home-url     http://greasyfork.icu/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);
    }
})();