Greasy Fork

Greasy Fork is available in English.

2025华医公需课: 人工智能赋能

2025年公需课:<<人工智能赋能制造业高质量发展>> 自动听课和自动考试脚本.听完公需课后,有“待考试”的视频, 要手动点一下, 或让它自动再刷一轮。华医的其它课程可以自动听课,但没有自动

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         2025华医公需课: 人工智能赋能
// @namespace    http://tampermonkey.net/
// @version      1.11
// @description  2025年公需课:<<人工智能赋能制造业高质量发展>> 自动听课和自动考试脚本.听完公需课后,有“待考试”的视频, 要手动点一下, 或让它自动再刷一轮。华医的其它课程可以自动听课,但没有自动
// @author       han2ee
// @include        http://cme*.91huayi.com/*
// @include        https://cme*.91huayi.com/*
// @include        https://dk.91huayi.com/*
// @include        https://sdnew.91huayi.com/*
// @run-at        document-start
// @grant   GM_xmlhttpRequest
// @grant   GM.setValue
// @grant   GM.getValue
// @grant unsafeWindow
// @license MIT
// ==/UserScript==


(function() {
    'use strict';
    const DK_HOST = "dk.91huayi.com";
    var courseInterID = 0;
    let first = true;
    // save the alert
    var _alert =window.alert;
    // ignore the alert
    function overrideSelectNativeJS_Functions () {
        window.alert = function alert (message) {
            console.log (message);
            return true;
        }
    }
    (function (funcToRun) {
        var D = document;
        var scriptNode = D.createElement ('script');
        scriptNode.type = "text/javascript";
        scriptNode.textContent = '(' + funcToRun.toString() + ')()';
        var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
        targ.appendChild (scriptNode);
    })(overrideSelectNativeJS_Functions);
    const requestAsync = function(url, data) {
        // console.log(data);
        return new Promise((resolve, reject) => {
            var reportAJAX_Error = (rspObj) => {
                console.error (`Request error: ${data}`);
                reject(`Request => Error ${data}  RES ${rspObj.status}!  ${rspObj.statusText}`);
            }

            var processJSON_Response = (rspObj) => {
                if (rspObj.status != 200 && rspObj.status != 304) {
                    reportAJAX_Error (rspObj);
                } else {
                    resolve(rspObj.responseText);
                }
            };
            GM_xmlhttpRequest ( {
                method:         "GET",
                url:            url,
                timeout: 6000,
                headers: {
                    "Referer": document.location.href,
                    "Content-Type": "application/x-www-form-urlencoded"
                },
                //data:           data,
                responseType:   "text/html",
                onload:         processJSON_Response,
                onabort:        reportAJAX_Error,
                onerror:        reportAJAX_Error,
                ontimeout:      reportAJAX_Error
            });
        });
    }

    const getUrlParameter = function getUrlParameter(sParam) {
        var sPageURL = window.location.search.substring(1),
            sURLVariables = sPageURL.split('&'),
            sParameterName,
            i;

        for (i = 0; i < sURLVariables.length; i++) {
            sParameterName = sURLVariables[i].split('=');

            if (sParameterName[0] === sParam) {
                return typeof sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]);
            }
        }
        return false;
    };

    const findFirstLesson = function(studyImgArr) {
        if (studyImgArr) {
            for (let i = 0; i < studyImgArr.length; i++) {
                if (studyImgArr[i].src.endsWith("anniu_01a.gif")) {
                    return i;
                }
            }
        }
        return -1;
    }
    const nextLesson = async function(cwid) {
        await wait(10 * 1000);
        let cid = await GM.getValue('cid');
        console.log("CID", cid);
        let hrefs = await GM.getValue(cid);
        for (let i = 0; i < hrefs.length - 1; i++) {
            if (hrefs[i].indexOf(cwid) != -1) {
                window.location.href = hrefs[i + 1];
            }
        }
    }

    const wait = ms => new Promise(resolve => setTimeout(resolve, ms));

    function isPromise(obj) {
        return !!obj && ((typeof obj === 'object' && typeof obj.then === 'function') || (typeof obj === 'function' && typeof obj().then === 'function'));
    }
    /**
     * Wait Resource.
     *
     * @param {Function} resourceFn pred function to check resource
     * @param {Object} options
     * @returns Promise
     */
    function waitResource(resourceFn, options) {
        var optionsRes = Object.assign(
            {
                interval: 3000,
                max: 10
            },
            options
        );
        var current = 0;
        return new Promise((resolve, reject) => {
            var timer = setInterval(() => {
                if (isPromise(resourceFn)) {
                    resourceFn().then(res => {
                        if(res) {
                            clearInterval(timer);
                            resolve();
                        }
                    });
                } else if (resourceFn()) {
                    clearInterval(timer);
                    resolve();
                }
                current++;
                if (current >= optionsRes.max) {
                    clearInterval(timer);
                    reject('Time out');
                }
            }, optionsRes.interval);
            });
    }

    const ANSWER_DICT = {
        // 2025年公需课:人工智能赋能制造业高质量发展
        '3b1a3ece-f378-4d36-9986-b16b00e6fdb6': ['f165a244-4e02-48d0-a215-b169012b5f80', '574d2df2-f95a-460f-98ba-b169012b5f80', '815bd9c0-8e80-41f5-a062-b169012b5f80', '69e04f4d-24ef-4686-a5ba-b169012b5f80'],
        '7fbab5de-4e67-4d4b-aaf7-098a43e8e30a': ['993a118f-6a82-4082-a0be-b2de0123bc4e'],
        '40b14fef-94c3-4419-9f9b-0ddb344269fe': ['7abfd10d-9f89-4b25-a1a4-b2de0123bc4e'],
        '1b971e45-91d4-481b-a298-600a46e4d939': ['992e9534-b9b1-40d3-999f-b2de0123bc4e'],
        '98e208bb-cf1e-4007-8383-a62f1a275baa': ['3d90c11b-8c7e-4243-8fe3-b2de0123bc4e'],
        '41bb8eb6-f9ab-4334-8ffb-afe774553a29': ['be8d2f3b-18ca-4e2d-9cf5-b2de0123bc4e'],
        '2181ef9f-ecff-42c5-ac1c-d1bcb4a5dada': ['523dd57f-9625-4e1d-889c-b2de0123bc4e'],
        '2bdd5e1e-3dc8-47f9-b5f9-e981cf579fbb': ['508c2c1a-47c4-4745-8be5-b2de0123bc4e'], // 7
        '9733fd30-8fe3-4b1a-bb6f-0675c710688d': ['8f5abcff-b899-4b8e-893b-b2de0123bc4e', 'c8ff5245-2131-4b7a-a328-b2de0123bc4e', '558448c5-16a1-49ea-bb89-b2de0123bc4e'], // m1
        'aa0c955d-2e72-42fa-a361-0c26807c4a85': ['749c0bfc-2c69-422f-8905-b2de0123bc4e', '5f13d0cc-96d0-4d9f-a9d8-b2de0123bc4e', '23d7c809-8690-4b67-b830-b2de0123bc4e'], // m2
        '5e9eef61-745f-4c00-9f89-2299ee15f8aa': ['74347e29-9393-436e-af7b-b2de0123bc4e', '14a0ca69-5f88-4964-ad47-b2de0123bc4e', 'a087caa7-819a-4f9d-8122-b2de0123bc4e', 'd82cb471-faf4-4974-a624-b2de0123bc4e'],
        '9dc5c848-1d7f-435f-a877-38a107dd1e4a': ['f67010c5-f1b7-45ec-9d4f-b2de0123bc4e', '35aba541-740e-4703-b799-b2de0123bc4e', '35a29775-e485-4f02-a865-b2de0123bc4e', 'c123d5a5-2a3c-46fc-a154-b2de0123bc4e'],
        '6f458aed-a1be-47d0-97a6-6c6600e5817c': ['8ecd3d85-31d6-4b96-9ae3-b2de0123bc4e', '92b02267-e298-4f8d-9320-b2de0123bc4e', 'ac98c99d-bf47-47fb-902a-b2de0123bc4e'],
        '1c6a241b-14a5-4543-9130-8c9d5e2364b3': ['50b13d55-1c33-4460-a57a-b2de0123bc4e', '16579acf-b8b4-4356-84b0-b2de0123bc4e'],
        '35b60d7f-edef-4652-a174-1b9c55b87ca4': ['Y'],
        '76c1906f-0b80-49a3-bef6-6ed84bf24a7b': ['N'],
        'bb767e22-a663-4372-ba5b-8bcc76c17c73': ['Y'],
        '156113fc-c13c-4afc-a51d-b87a2452cff6': ['Y'],
        '429eaf80-6aa5-4804-93dd-c8c65dbb861c': ['Y'],
        'be005110-d22b-401e-a50f-cffcdd8f4eae': ['Y'],
        '49c3c8f9-5d47-40b3-b01d-ec76e1f810b8': ['N'],

        // 依法执业,合规行医
        '9e6ec018-b8f6-4bee-a78f-b1d701708a72': ['2379d756-240f-4754-85dd-abe801374819', '74d931e1-f528-461f-9c86-aed200f5dfcc', '7b9bb0ed-602b-4fa8-8864-abe801374819', '20eeeceb-da10-4fee-a6d3-abe801374819', '2f81fccf-5798-42e4-8b65-abe801374819'],
        'ccd47ed8-c88d-4827-9046-b1d701708a72': ['a6453c18-31b3-41f8-8416-abe801475376', '04276662-4676-4131-a8b9-abe801475376', 'd7a69b91-e3a5-48ee-bf0d-aed200f8a0bd', '459cac35-7cc4-430d-8f0b-aed200f9ccd8', '4f72098e-aefe-41b9-b495-abe801475376'],
        'bc3bc16f-c2c0-43ea-93ba-b1d7016d36a4': ['61cdd054-c6a8-4f51-a46b-ae4b00d03450', '4e868894-86d5-4f5f-a898-ae4b00d03450', '86214136-8c2a-407a-bf3e-ae4b00d03450', '5cd1e19a-d4c5-4815-b10f-ae4b00d03450', '9f3e920e-ef1a-42d3-bf76-ae4b00d03450'],
        '012789e3-62aa-4a6e-91cb-b1d7016d36a4': ['446a87d9-f2c0-4a05-834d-ae4b00cf5265', 'b75fe210-aa96-4e14-aa23-ae4b00cf5265', '860b163d-9c9e-47ce-9607-ae4b00cf5265', 'f9b1f7cb-9e80-4998-9876-ae4b00cf5265', 'a4670a1b-3081-4bca-8396-ae4b00cf5265'],
        'f4ea750f-943d-4285-a46f-b1d7016d5283': ['5b53952a-d95f-4cea-9afd-ae6b01243068', '4fde2b5b-9ee5-4c65-ab08-ae6b01243068', 'c870aa0f-98e1-4501-99bc-b2bf009cfa46', 'e339103b-d646-4e2b-875e-ae6b01243068', 'e5e5eed4-bd95-41ef-a1ff-ae6b01243068'],
        '88c1826a-c82d-4682-9bbe-b1d7016d5283': ['44417a71-a5dc-4c3e-80f1-ae6b0124405c', 'a3253592-5324-46c0-8916-ae6b0124405c', 'e26882b8-b0b9-48bd-a6b9-ae6b0124405c', 'ff9f571e-cefb-4fd6-a678-ae6b0124405c', 'bbb417b3-6fbb-471d-8452-ae6b0124405c'],

        // 医共体框架下的慢病防控及其智慧化管理
        '43515c51-7bd4-4cc3-b409-b1de010f13f3': ['1458f01a-44c2-4dcb-998f-b099010f5071', '3bcc06e4-8273-4aba-be88-b099010faa64', '5a47da11-2478-4a2f-93af-b099010f5071', '87325485-10e1-4513-a8be-b099010f5071', '1b1f1254-d905-4fdb-a5be-b099010f5071'],
        '74861118-0744-4dd7-b0d3-b1de010ffd04': ['70e70bf9-4f4d-42d3-8761-ae5800a39f03', 'a14fb963-d0c3-4e9c-90a9-ae5800a39f03', 'c0ef5c99-6b2b-4fd4-97f0-ae5800a39f03', '564e9c33-2d8e-4bb9-9397-ae5800a39f03', 'ccb6c198-4b82-4b40-bc97-ae5800a39f03'],
        'b2be6457-e49b-4505-94c7-b1de01102516': ['0c8a6d5a-9414-4602-a01f-b099010806a5', '7d69187b-af1a-4733-9773-b099010806a5', '182a599d-fb8a-4273-91b9-b099010806a5', '9eba7e3b-bf4f-4e0b-a40e-b099010806a5', '44dda92f-da47-457b-9d54-b099010806a5'],
        'f2a25435-8057-4a7d-a184-b1de01106fbb': ['7ee276fa-89e1-411e-8960-af040114cda7', 'd40bce4e-3e08-446a-9948-af040114cda7', 'c150d115-abfa-4a13-a362-af040114cda7', '08a9aec6-1cbc-4e62-8391-af040114cda7', 'c394ce60-ebba-4709-b5cd-af040114cda7'],
        'c0119eaf-bf85-4dfe-bf3d-b1de0118027f': ['e1962e0b-084e-4ab0-a853-af550101a423', '8e841cb6-0e9a-4716-9534-af5501018dd3', 'f97304f3-bca8-44d4-9f0d-af5501018159', '2ccb1cef-9d6c-454d-8234-af5501016e95', '71e01d3f-2930-4d67-bb15-af55010198a1'],
        '3e5b8390-1ffb-4429-9a64-b1de011ee6d7': ['d9de8ec1-e5d9-43a0-aca7-ad3d0114a568', 'b42b12e2-4918-4590-8110-ad3d0114a568', '1ca66f7f-13ec-4e59-92d2-b07b00b6428b', '99bdb141-cd40-4d8c-99cd-ad3d0114a568', 'e6d5e0a8-d01e-4b7f-8560-ad3d0114a568'],

        // 药物过敏性休克的预防与救治
        '940ece7f-4d1c-49aa-9146-b1d80132f714': ['79d35f13-177c-4121-bf5f-a98c00f03911', '2cf2afdd-cd76-429a-b310-a98c00f03911', '6ab7aa9f-4e3d-4426-929e-a98c00f03911', '02e24d3a-eeb0-4823-aa42-a98c00f03911', 'c98ca22b-86f9-47cf-90c3-a98c00f03911'],
        '728313ab-a3e4-4a26-bdba-b1d80120cad8': ['cb9bcc8e-e7d4-42f8-8a84-aff100fe3de3', '4f54eb44-af06-4c45-bd60-aff100fe3de3', 'f1b188da-6ff3-403b-a6cb-aff100fe5af1', 'f6f5728d-13d5-4a49-a414-aff100fe66c4', 'f983520d-67a0-4f9c-af4e-aff100fe3de3'],
        'f343797a-75fd-40cd-965c-b1c700d8a8a0': ['bbd9dd77-e8ed-4394-a57a-b03c01114810', 'ca7c1310-153c-48c7-a017-b03c01114810', '58bf3fe6-4eb4-4bb1-bdaa-b03c01114810', 'e91566d2-d0a3-4547-a5d5-b03c01114810', '61c851b9-0a87-4800-b892-b03c01114810'],
        '9ba90f7e-c1a8-4731-bdc1-b1c700dd6a57': ['d4c2cddd-3723-4172-a2d9-b03700dc6e30', '9e060a15-4461-40c9-a81c-b03700dc6e30', 'c5858a3b-247a-4da8-9445-b03700dc6e30', 'a2ea36d1-6eb2-46d9-b348-b03700dc6e30', '420edf0f-d9fe-4ac6-88ae-b03700dc6e30'],
        'f304c57e-f582-40dd-b8ff-b1c700dd89b5': ['c22bd9ac-c989-48dd-80f8-b02201246458', 'f74f5fc2-94d4-4670-afeb-b02201246458', '19255f48-2e6a-4ca1-beb9-b02201246458', '626895bf-1d68-4365-8917-b02201246458', '6bab20d2-0856-4239-854b-b02201246458'],
        '2b7e2476-a02e-4d88-94c4-b1d8011f5312': ['7e52b006-936c-4f0d-9c46-abcd00a41e71', 'b46f2ec5-92e5-47ba-918c-abcd00a41e71', 'b224b7b6-4a75-4800-9143-abcd00a41e71', 'c62c118b-afdc-4259-be84-abcd00a41e71', '29af96ee-561d-45fb-bcf8-abcd00a41e71'],

        // 健康管理与传染病控制
        '0c8ce35a-dc4f-47f4-95ad-b1d801011054': ['6f524538-a193-43f8-a1e9-acf701098315', 'f39e2f37-837f-4d77-af53-acf701098315', '3a67aa68-6d55-4845-b7c0-acf701098315', 'b017b203-bf5c-48ff-b724-acf701098315', 'ee3d1808-7285-40d3-8af3-acf701098315'],
        '67d6a98d-b4e1-4ca7-a766-b1d801011054': ['236f64e0-6f07-4126-a6d1-acf701117159', 'ecb86520-283e-4d60-8127-acf701117159', '4744051f-8f39-44d4-9e8f-acf701117159', '7b2a5b04-3053-433c-8c92-acf701117159', 'b785e76c-3d69-47d2-b673-acf701117159'],
        'cf4658d1-6f36-46c9-9ac5-b1d801011054': ['2ee9f6d0-a369-4986-b334-acf701174af7', '6eff6c34-d3ac-4fc6-88c6-acf701174af7', 'cd882c82-0716-41cc-81dc-acf701174af7', '574561a8-013e-449a-a0e3-acf701174af7', '68fb859d-8746-4ae5-8e63-acf701174af7'],
        '5ed2ac43-5ef4-4a9b-9622-b1ee005b38c0': ['c8c7c53c-4348-49a7-b192-69be2922f8e8', '1e5c303c-8595-47fe-86b0-8c903ae8827b', 'fc4971a3-e319-495b-bbde-d2b5a1815023', '7ac878eb-88a2-4978-8c2e-fc57b75df9cc', '1ab5d35c-30d3-49bb-8a22-ef0e66ee96af'],
        '3f958a2d-073e-44c4-add7-b243009f2307': ['9960d50c-60a6-42fd-abe1-af00011f6a10', '072c73d3-47e7-4f08-92fa-af00011f6a10', '2bb2155e-e936-4627-a58f-af00011f6a10'],
        '45101661-3f77-4dce-bb2a-b243009f2307': ['e7fdb15b-5bb1-44dc-a280-af00011f9a87', '56a27d0c-3918-4863-b0d9-af00011f9a87'],
    };

    // intercept alert window
    if (getUrlParameter('cwid') || getUrlParameter('cid')) {
        let alrtScope;
        if (typeof unsafeWindow === "undefined") {
            alrtScope = window;
        } else {
            alrtScope = unsafeWindow;
        }
        alrtScope.alert = function (str) {
            console.log ("Greasemonkey intercepted alert: ", str);
        };
    }
    if (window.top !== window.self) {
        return;
    }
    // 单个课程页面
    if (window.location.host !== DK_HOST && (window.location.pathname == '/course_ware/course_ware_polyv.aspx' || window.location.pathname == '/course_ware/course_ware_cc.aspx')) {
        console.log("单个课程页面");
        /*
        // 修改播放器init参数 倍速:'speed': true  可拖动'ban_seek': false
        let scriptIndex = 0;
        new MutationObserver(function(mutations) {
            // check at least two H1 exist using the extremely fast getElementsByTagName
            // which is faster than enumerating all the added nodes in mutations
            let scriptList = document.getElementsByTagName('script');
            if (scriptList.length > 10) {
                this.disconnect(); // disconnect the observer
            }
            for (; scriptIndex < scriptList.length; scriptIndex++) {
                let scriptEle = scriptList[scriptIndex];
                if (scriptEle.innerHTML && scriptEle.innerHTML.indexOf("'speed': false")) {
                    scriptEle.innerHTML = scriptEle.innerHTML.replace("'speed': false", "'speed': true").replace("'ban_seek': banSeek", "'ban_seek': false");
                    console.log("REPLACE");
                    this.disconnect();
                    break;
                }
            }
        }).observe(document, {childList: true, subtree: true});
        */
        // 拦截first,不让加载视频中间的问题
        let inter = setInterval(function() {
            try {
                if (first && typeof player !== "undefined") {
                    first = false;
                    console.log("FIRST:", first);
                    player.sendQuestion = function(data) {};
                    clearInterval(inter);
                }
            } catch (err) {
                console.log(err);
            }
        }, 10);
        let initRateFlag = true;
        let lastTime = 0;
        courseInterID = setInterval(async function() {
            if (first) { // mare sure the player.sendQuestion is empty function
                console.log("sendQuestion should be empty function");
                return;
            }

            if (typeof closeProcessbarTip === "function") { // close the warning
                closeProcessbarTip();
            }
            if (!$("#jrks")[0].getAttribute('disabled')) { // finish lesson
                let cwid = getUrlParameter('cwid');
                if (ANSWER_DICT[cwid]) {
                    try {
                        console.log("try to do exam:");
                        $("#jrks")[0].click();
                        clearInterval(courseInterID);
                    } catch (err) {
                        console.error(err);
                    }
                } else { // jump to next
                    await nextLesson(cwid);
                    clearInterval(courseInterID);
                }
            }
            await GM.setValue("curCWID", getUrlParameter('cwid'));

            // Resume video
            if (window.location.pathname == '/course_ware/course_ware_polyv.aspx') {
                let curTime = player.j2s_getCurrentTime();
                if (curTime === lastTime && curTime < player.j2s_getDuration()) {
                    console.log(curTime, "try to resume");
                    // resume
                    player.j2s_setVolume(0); // avoid the "user didn't interact with doc" error
                    player.j2s_resumeVideo();
                    console.log("resume successfully");
                }
                lastTime = curTime;
            } else {
                let curTime = player.getPosition();
                if (curTime === lastTime && curTime < player.getDuration()) {
                    console.log(curTime, "try to resume");
                    // resume
                    player.setVolume(0); // avoid the "user didn't interact with doc" error
                    // player.j2s_resumeVideo();
                    console.log("resume successfully");
                }
                lastTime = curTime;
            }
            /*
            if (initRateFlag) {
                let rate = await GM.getValue('rate', 1);
                if (player) {
                    player.changeRate(rate);
                    initRateFlag = false;
                }
            } else {
                await GM.setValue('rate', player.currentRate);
            }
            */
        }, 3000);
    }

    if (window.location.pathname == '/pages/noplay.aspx') {
        setTimeout(async function() {
            let cwid = await GM.getValue("curCWID");
            window.location.href = "/course_ware/course_ware.aspx?cwid=" + cwid;
            // document.querySelector(".yes").click();
        }, 5000);
    }
    // 考试页面
    if (window.location.pathname == '/pages/exam.aspx') {
        setTimeout(async function() {
            await waitResource(() => !!document.querySelector("#btn_submit"));
            let cwid = getUrlParameter('cwid');
            console.log("CWID:", cwid);
            let answer = ANSWER_DICT[cwid];
            if (answer) {
                for (let item of answer) {
                    if (item.startsWith('gvQuestion')){
                        $('#' + item).click();
                    } else {
                        $(`[value=${item}]`).click();
                    }
                    await wait(200);
                }
                $('#btn_submit').click();
            }
        }, 3000);
    }

    if (window.location.pathname == '/ExamInterface/ComputerExamIndex') {
        setInterval(async function() {
            let qid = $('.dd_01').attr('questionid');
            let answer = ANSWER_DICT[qid];
            if (answer) {
                for (let item of answer) {
                    if (item.startsWith('gvQuestion')){
                        $('#' + item).click();
                    } else {
                        $(`[value=${item}]`).click();
                    }
                    await wait(500);
                }

                if ($('#btnNext') && $('#btnNext').css('display') != 'none') {
                    $('#btnNext').click();
                } else {
                    $('.submitExam').click();
                    await wait(500);
                    $('#subPaper').click();
                }
            }
        }, 5 * 1000);
    }
    // 考试结果页面
    if (window.location.pathname == '/pages/exam_result.aspx') {
        setTimeout(async function() {
            let cwid = getUrlParameter('cwid');
            await nextLesson(cwid);
        }, 3000);
    }
    // 目录页面
    if (window.location.pathname == '/pages/course.aspx') {
        console.log("目录面");
        let interId = setInterval(async function() {
            let hrefs = document.querySelectorAll(".course h3 a");
            let vals = [];
            for (let i = 0; i < hrefs.length; i++) {
                // if (hrefs[i].children[0].src.endsWith("anniu_01a.gif")) {
                vals.push(hrefs[i].href);
                // }
            }
            // console.log(vals);
            let cid = getUrlParameter('cid')
            await GM.setValue(cid, vals);
            await GM.setValue('cid', cid);
            console.log("Course list have been set.");
            clearInterval(interId);
        }, 3000);
    }

    // 医师定期考核目录页面
    if (window.location.pathname == '/course_ware/course_ware_list.aspx') {
        console.log("目录面");
        let interId = setInterval(async function() {
            // find the first course to learn
            let eles = document.querySelectorAll(".xx"); //.nextElementSibling.click()
            if (eles.length === 0) {
                eles = document.querySelectorAll(".wx");
            }
            if (eles.length > 0) {
                eles[0].nextElementSibling.click();
                clearInterval(interId);
            }
        }, 3000);
    }

    // 医师定期考核单个课程页面
    if (window.location.host === DK_HOST && window.location.pathname == '/course_ware/course_ware_polyv.aspx') {
        console.log("单个课程页面");
        // 拦截first,不让加载视频中间的问题
        let inter = setInterval(function() {
            try {
                if (first && typeof player !== "undefined") {
                    first = false;
                    console.log("FIRST:", first);
                    player.sendQuestion = function(data) {};
                    clearInterval(inter);
                }
            } catch (err) {
                console.log(err);
            }
        }, 10);
        let initRateFlag = true;
        let lastTime = 0;
        courseInterID = setInterval(async function() {
            if (first) { // mare sure the player.sendQuestion is empty function
                console.log("sendQuestion should be empty function");
                return;
            }

            if (typeof closeProcessbarTip === "function") { // close the warning
                closeProcessbarTip();
            }

            // Resume video
            let curTime = player.j2s_getCurrentTime();
            if (curTime === lastTime && curTime < player.j2s_getDuration()) {
                console.log(curTime, "try to resume");
                // resume
                player.j2s_setVolume(0); // avoid the "user didn't interact with doc" error
                player.j2s_resumeVideo();
                console.log("resume successfully");
            }
            lastTime = curTime;
            /*
            if (initRateFlag) {
                let rate = await GM.getValue('rate', 1);
                if (player) {
                    player.changeRate(rate);
                    initRateFlag = false;
                }
            } else {
                await GM.setValue('rate', player.currentRate);
            }
            */
        }, 3000);
    }
})();