HITSZ安全教育课程学习脚本

能够通过网络请求的方式直接帮您跳过网课的学习阶段,但是考试答题还是需要自己完成的哦;本脚本仅做交流学习技术使用,请勿将此脚本用于收费或非法用途。

// ==UserScript==
// @name         HITSZ安全教育课程学习脚本
// @namespace    https://www.chiro.work/
// @version      0.20
// @description  能够通过网络请求的方式直接帮您跳过网课的学习阶段,但是考试答题还是需要自己完成的哦;本脚本仅做交流学习技术使用,请勿将此脚本用于收费或非法用途。
// @author       Chiro
// @match        http://weiban.mycourse.cn/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    function getQueryString(name) {
        let querys = window.location.href.split('?')[1].split('&');
        for (let q of querys) {
            let qs = q.split('=');
            if (qs.length <= 1) continue;
            if (qs[0] === name) return qs[1];
        }
        return null;
    }
    function sleep (time) {
        return new Promise((resolve) => setTimeout(resolve, time));
    }
    async function main() {
        await sleep(2000);
        if (window.location.href === 'http://weiban.mycourse.cn/#/') {
            console.log("主页");
            // 进入学习任务选择页面
            $('.mod-more').click();
            setTimeout(onchange, 1000);
        } else if (window.location.href === 'http://weiban.mycourse.cn/#/learning-task-list') {
            console.log("学习任务选择页面");
            // 引导点击下面的两个任务
            $(".mod-headline").text("脚本 :点击下面的一个学习任务");
            $('.task-block').onclick = () => {
                setTimeout(onchange, 1000);
            };
        } else if (window.location.href === 'http://weiban.mycourse.cn/#/course?projectType=pre' ||
                   window.location.href.startsWith('http://weiban.mycourse.cn/#/course?projectId')) {
            console.log("课程列表页面");
            let stats = $('div.state');
            let found = false;
            for (let i=1; i<stats.length; i++) {
                let sp = stats[i].textContent.split('/');
                if (sp[0] === sp[1]) continue;
                console.log($('h3')[i - 1].textContent, stats[i].textContent);
                $('a.btn')[i - 1].click();
                found = true;
                break;
            }
            if (!found) {
                history.go(-1);
                setTimeout(onchange, 1000);
            }
            setTimeout(onchange, 1000);
        } else if (window.location.href.startsWith('http://weiban.mycourse.cn/#/course/list')){
            console.log('微课列表页面');
            // 请求微课信息
            let formData = {
                str: '',
                append(tag, val) {
                    if (this.str.length !== 0) this.str += '&';
                    this.str += tag + '=' + val;
                }
            };
            try {
                let user = JSON.parse(localStorage.getItem('user'));
                formData.append('userProjectId', getQueryString('projectId'));
                formData.append('chooseType', getQueryString('subjectType'));
                formData.append('categoryCode', getQueryString('categoryCode'));
                formData.append('name', '');
                formData.append('userId', user.userId);
                formData.append('tenantCode', user.tenantCode);
                formData.append('token', user.token);
                // 假装网络不好
                let response = await fetch(`https://weiban.mycourse.cn/pharos/usercourse/listCourse.do?timestamp=${parseInt(new Date().getTime() / 1000) - 10}`, {
                    method: 'POST',
                    body: formData.str,
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded'
                    }
                });
                let data = await response.json();
                console.log('got data', data);
                let promises = [];
                let functions = [];
                for (let d of data.data) {
                    if (d.finished != 2) continue;
                    // 请求完成这个微课
                    let formData2 = {
                        str: '',
                        append(tag, val) {
                            if (this.str.length !== 0) this.str += '&';
                            this.str += tag + '=' + val;
                        }
                    };
                    formData2.append('userProjectId', getQueryString('projectId'));
                    formData2.append('userId', user.userId);
                    formData2.append('tenantCode', user.tenantCode);
                    formData2.append('token', user.token);
                    let courseId = d.resourceId;
                    formData2.append('courseId', courseId);
                    console.log('studying', d.resourceName);
                    // await fetch(`https://weiban.mycourse.cn/pharos/usercourse/study.do?timestamp=${parseInt(new Date().getTime() / 1000) - 5}`, {
                    // @萝叽:去掉“网卡了”的模拟
                    await fetch(`https://weiban.mycourse.cn/pharos/usercourse/study.do?timestamp=${Date.now()}`, {
                        method: "POST",
                        body: formData2.str,
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded'
                        }
                    });
                    // await sleep(20);
                    // @萝叽:增长等待时间,防止脚本检测
                    await sleep(10 * 1000);
                    console.log('finishing', d.resourceName);
                    await fetch(`https://weiban.mycourse.cn/pharos/usercourse/finish.do?userCourseId=${d.userCourseId}&tenantCode=${user.tenantCode}`, {
                        method: "GET",
                        mode: "no-cors",
                        headers: {
                            "Content-Type": "application/x-www-form-urlencoded"
                        },
                        credentials: "include",
                        Referer: `https://mcwk.mycourse.cn/course/A25001/A25001.html?userCourseId=${d.userCourseId}&tenantCode=${user.tenantCode}&type=1`
                    });
                }
                console.log("完成所有微课");
                history.go(-1);
            } catch(e) {
                console.error("失败", e);
            }
            setTimeout(onchange, 1000);
        } else if (window.location.href.startsWith('http://weiban.mycourse.cn/#/course/detail')) {
        }
    }
    async function onchange() {
        console.log("onchange");
        await main();
    }
    onchange();
})();