Greasy Fork is available in English.

中建一局先锋学堂知学云_挂机

挂机看知学云网课,已适配中建一局先锋学堂

// ==UserScript==
// @name         中建一局先锋学堂知学云_挂机
// @namespace    http://tampermonkey.net/
// @version      3.3
// @description  挂机看知学云网课,已适配中建一局先锋学堂
// @author       kakasearch
// @match        https://cscec1b.zhixueyun.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=cscec1b.zhixueyun.com
// @require      https://greasyfork.org/scripts/425166-elegant-alert-%E5%BA%93/code/elegant%20alert()%E5%BA%93.js?version=922763
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        unsafeWindow
// @antifeature  ads  我们会展示捐助页面,但您可以关闭它
// @license      GPLV3
// ==/UserScript==

(function() {
    'use strict';
    unsafeWindow.kaka_not_donate = function(){
        document.querySelector("#donatediv").innerHTML='<div style="text-align: center; margin: 10px;"><p>(ಥ﹏ಥ) 好吧</p><div>'
        GM_setValue("donate_count",new Date().getTime())
        setTimeout(function(){window.location.reload()},1500)
    }
    unsafeWindow.kaka_has_donate = function(){
        if(document.querySelector("#donatediv")){document.querySelector("#donatediv").innerHTML=  '<div style="text-align: center; margin: 10px;"><p>٩(^ᴗ^)۶ 公若不弃,某愿拜为义父</p><div>'}
        GM_setValue("donate_count",new Date().getTime()+ 1000*3600*24*365 )
        setTimeout(function(){window.location.reload()},1500)
    }
    setInterval(function(){
        if(/study\/errors/.test(window.location.href)){
            new ElegantAlertBox("准备关闭页面>__<")
            window.close()
        }
    },5000)
    if(!GM_getValue("doing")){
        //init
        GM_setValue("doing",{"name":"","time":1,"status":""})
    }
    if(!GM_getValue("donate_count")){
        //init
        GM_setValue("donate_count",new Date().getTime())
    }
    var donate_flag = true;
    if(GM_getValue("donate_count") && new Date().getTime()- GM_getValue("donate_count") > 1000*30*3600*24){
        //donate
        donate_flag = false ;
        var script = document.createElement('script');
        script.src = 'https://cdn.bootcdn.net/ajax/libs/layer/3.5.1/layer.min.js'; // Layer.js CDN链接
        document.head.appendChild(script);
        script.onload = function() {
            layer.open({
                type: 1,
                title: '捐助页面',
                closeBtn:0,
                anim: 2,
                area: [Number(document.body.clientWidth/2)+"px",Number(document.body.clientHeight*0.9)+"px"],
                shadeClose: false,
                offset: 'auto', // 居中显示
                skin: 'layui-layer-demo', // 无背景色
                content: `
    <div id = "donatediv">
      <img src="https://greasyfork.org/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6ODY4NDIsInB1ciI6ImJsb2JfaWQifX0=--418d35c0003c67ad7cf985d685e9444fda96190a/jdd803evdr4tdkqp78jk2afo27z6.png?locale=zh-CN" style="max-width: 50%; display: block; margin: 0 auto;"/>
      <div style="text-align: center; margin: 10px;">
        <p style="text-align: center; margin: 10px;">如果脚本对你有帮助,可以捐助我一瓶快乐水</p>
        <p style="text-align: center; margin: 10px;">有了快乐水,我就可以写出更多对你有帮助的脚本</p>
        <button onclick="kaka_has_donate();" style="padding: 5px 10px; background-color: #50a82b; color: #fff; border: none; margin-left: 10px; border-radius: 5px;">我已捐助^_^</button>
        <button onclick="kaka_not_donate();" style="padding: 5px 10px; background-color: #dc3545; color: #fff; border: none; margin-left: 10px; border-radius: 5px;">我不想捐助</button>
      </div>
    </div>
  `,
            });
        }
    }

    function click_course(){
        //查找并点击需要学习的课程
        for(let i of document.querySelectorAll(".item[data-resource-id]")){
            let status = i.querySelector(".operation").innerText
            let name = i.querySelector(".name-des").innerText
            if(/(继续学习)|(开始学习)/.test(status)){
                GM_setValue("doing",{"name":name,"time":new Date().getTime(),"status":status})
                i.click()
                return true
            }
        }
        return false
    }
    if(donate_flag){
        if(/study\/subject\/detail/.test(window.location.href)){
            // 课程主页,在当前页面实现控制做哪些课程
            new ElegantAlertBox("初始化中,请等待>__<")
            setInterval(function(){
                let doing_item = GM_getValue("doing")
                let next_flag = false
                if(new Date().getTime()-doing_item.time>1000*20){
                    //超过20s没有更新状态视为过期
                    next_flag = true
                    new ElegantAlertBox("准备开始新的课程>__<")
                }else{
                    next_flag = false
                    new ElegantAlertBox("貌似有课程正在观看,检查中,请等待>__<")
                }

                if (next_flag){
                    if(click_course() ){
                        //有需要做的课程,已经点击
                        new ElegantAlertBox("已打开新的学习页面学习>__<")
                    }else{
                        new ElegantAlertBox("找不到需要学习的内容>__<")
                    }
                }
            },5000)
        }else if(/study\/course\/detail/.test(window.location.href)){
            //视频播放页,做完后给主页一个标志,结束标签页
            new ElegantAlertBox("检查中,请等待>__<")
            setInterval(function(){
                let name = document.querySelector("div.title-row > div")
                if(name){
                    name = name.innerText
                }else{return}
                GM_setValue("doing",{"name":name,"time":new Date().getTime(),"status":"学习中"})
                let state = document.querySelector("dl.focus > div.chapter-right > div.section-item.section-item11 > div:nth-child(3) > span")
                state = state?state.innerText:null
                if(state == "已完成"){
                    new ElegantAlertBox("准备播放下一个视频>__<")
                    let courses = document.querySelectorAll("dl")
                    for(let i of courses){
                        if(i.querySelector("div.chapter-right > div.section-item.section-item11 > div:nth-child(3) > span").innerText != "已完成"){
                            i.click()
                            return
                        }
                    }
                    new ElegantAlertBox("全部学习完>__<")
                    GM_setValue("doing",{"name":name,"time":new Date().getTime()-1000*30,"status":"已完成"})
                    GM_setValue(name,{"name":name,"time":new Date().getTime()-1000*30,"status":"已完成"})
                    window.close()
                }else{
                    new ElegantAlertBox("还没有学习完 >__<")
                    if(document.querySelector(".register-mask-layer") && 'display: none;' != document.querySelector(".register-mask-layer").getAttribute("style")){
                        document.querySelector("#D210registerMask").click()
                    }
                    document.querySelector("video").muted="muted"
                    document.querySelector("button.vjs-big-play-button").click() //开始播放的按钮
                }

            },5000)
        }
    }
})();