雨课堂防老六神器

用于在雨课堂下课后,在老师下一次开课且自己还未进入雨课堂签到时,直接跳转到雨课堂上课页面。使用方法:打开当前的课程详情页面(一般是 https://www.yuketang.cn/v2/web/studentLog/课程id),点击开始请求即可。当新开课且没进入时,会自动跳转到课程页面。(课程详情页面不能关)

// ==UserScript==
// @name         雨课堂防老六神器
// @namespace    http://tampermonkey.net/
// @version      2024-11-20
// @description  用于在雨课堂下课后,在老师下一次开课且自己还未进入雨课堂签到时,直接跳转到雨课堂上课页面。使用方法:打开当前的课程详情页面(一般是 https://www.yuketang.cn/v2/web/studentLog/课程id),点击开始请求即可。当新开课且没进入时,会自动跳转到课程页面。(课程详情页面不能关)
// @author       soladuor
// @match        https://*.yuketang.cn/v2/web/studentLog/*
// @match        https://*.yuketang.cn/v2/web/index
// @icon         data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M0I4REE0RUY4RjAwMTFFNzk3MThFMkYwOTUyRUJGMjAiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6M0I4REE0RjA4RjAwMTFFNzk3MThFMkYwOTUyRUJGMjAiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDozQjhEQTRFRDhGMDAxMUU3OTcxOEUyRjA5NTJFQkYyMCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDozQjhEQTRFRThGMDAxMUU3OTcxOEUyRjA5NTJFQkYyMCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkxZQwUAAAFKUExURWOe9P///3eq9a3M+Z7D+JS898/h/H6v9mag9Hqs9vj7/7XR+m2k9enx/dXl/KjJ+d/r/ZK798Ta+3Sp9Zm/+Ozz/qzL+f3+/32u9mmh9Hut9uPu/cfc+5i/+Gmi9Pb6/nWp9Xaq9ejx/f39/+71/nCm9f7///H2/vz9//X5/o24983g+/7+/5a++PP4/sXb++Hs/Wyj9Wqj9djn/IWz9nKo9ebv/dLj/K7M+Ze++Gih9Hir9pO897PP+r3W+nir9cbc++30/q/O+b7W+vr8//L3/o65993q/fn7/4m29+vz/meh9Gqi9Ii196PG+MHY++Lt/dro/Pb5/p3C+JC69/v9/2Wf9Hyu9vn8/2Wg9PT4/rTQ+qTH+anJ+cPa+2Sf9JW997zV+tPk/H+v9snd+/j6/pnA+LHO+evy/m+m9XKn9XSo9ZG798re+z70b3UAAAGuSURBVHja7JflbwJBEMV3gBY44HAtUKyCU3d3d3f3//9rd0lpuHLA7U3a1N6Xt5nJ/JJLbuURAMGkNxAVMuhNAgABi5GoltECREDMU4JATAQlE9HjAHpiwAFK43vi/ahS1JNraj2TSEmLTQAQUjBszjoWoaiZA0mDlbTUw+OHc76q3+vZ8MK7nLKAEepNstOByV6QSCMLaGSLyulHTwE+SjngbDYdB+AFpMS+lWJnUOsGWdUGjLUDzPewzjWAGsAW82HWiasD6Jg3lDo/CpCm7sUAbqm/YAAk69D6UYA3/WnA8kIEBQi0gVeHAZxSz32LveBivo0AmCcAYn4OALsXBsqPtJYTq5lwAAKXsQuD7KGqEFDSbwKECjY7F8B51VEO8GUA2qMcgCOAfSPmT5ymFevvuBf+AV8LeJAAbLRyzgWwSbdCxNHVv8sBSKy1yD9G87SZrANw53Wa6q/3HLSu1gDsiNY6AcX8PFT1amsONnQqjQGVgOagfYkjR3SzmeKzvY2tWkWXnzOJeDaTx8WF/Qbcd1FMqAk7yecKHbrQsQ8dPNHRFx2+sfH/VYABAJzvJscE8bzaAAAAAElFTkSuQmCC
// @grant        GM_notification
// @grant        GM_xmlhttpRequest
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 定时器间隔时间(单位ms)
    let sleepTime = 1000 * 60 * 1

    // 获取课程id
    let url_split = window.location.href.split("/")
    let class_id= url_split[url_split.length-1].split("?")[0]
    console.log(class_id)

    // 记录次数
    let log = document.createElement("div")
    log.style.color = "red"
    log.style.float="left"
    log.innerHTML = `+++ 开启日志记录 | 定时器间隔时间 [ ${sleepTime/1000} s ] +++`
    // 请求次数
    let sendTimes = 0

    // 定时器id
    let sendTimer;
    // 开启定时器
    function startTimer(){
        //清除旧定时器
        clearInterval(sendTimer);
        // 执行一次代码
        getMessage()
        // 开启新定时器
        sendTimer = setInterval(() => {
            getMessage()
        }, sleepTime);
    }

    function getMessage(){
        log.innerHTML = `=== 请求次数 : [ ${++sendTimes} ] | 定时器间隔时间 [ ${sleepTime/1000} s ] ===`;
        let resp = {}
        GM_xmlhttpRequest({
            url:`https://www.yuketang.cn/v2/api/web/logs/learn/${class_id}?actype=14&page=0&offset=20&sort=-1`,
            method :"get",
            onload:function(xhr){
                console.log(xhr.responseText);
                resp=JSON.parse(xhr.responseText)
                console.log("JSON转为JS对象")
                console.log(resp)
                main(resp)
            }
        });
    }

    // 主要逻辑函数,如果上课了且没有签到则直接跳转到上课页面
    function main(resp){
        if (resp.errcode ===0){
            console.log("请求成功")
            const activitie = resp.data.activities[0]
            // attend_status 是否已签到
            // is_finished   是否已下课
            if(activitie.attend_status||activitie.is_finished){
                // 下课了 或者 签过到了 就不管了
            }else{
                // 没下课,也没签到,直接跳到上课页面
                /*
                GM_notification({
                    text: "快点回来签到",// 通知文字(除非设置了突出显示,否则为必填)
                    title:`雨课堂签到提示 == > ${activitie.title}`,// 通知的标题
                    //image : "",// 通知图像
                    highlight:true,// 一个布尔型标志,是否突出显示发送通知的选项卡(除非设置了文本,否则为必需)
                    silent: false,// 一个布尔值是否不播放声音
                    timeout: 60000,// 通知将被隐藏的时间(毫秒,0则禁用)
                    ondone : (byUser) => {
                        console.log('done user:', byUser);
                    },// 在通知关闭时(无论是由超时还是单击触发)或突出显示选项卡时调用
                    onclick :() => {
                        console.log('onclick');
                    },// 在用户单击通知时调用
                });
                */
                // document.querySelector(".activity__wrap").click()
                window.open(`https://www.yuketang.cn/lesson/fullscreen/v3/${activitie.courseware_id}`,"_blank")
            }
        } else{
            console.log("请求失败")
            log.innerHTML = `===> 请求失败[${resp.errmsg}] === ` + log.innerHTML
        }
    }

    // 主功能按钮
    let btn = document.createElement("button")
    btn.style.float="left"
    btn.innerHTML = "开始请求"

    // 点击开始请求
    function startClick(){
        // 获取课程id
        url_split = window.location.href.split("/")
        class_id= url_split[url_split.length-1].split("?")[0]
        console.log(class_id)
        // 开始定时任务
        startTimer()
        // 按钮绑定 点击结束请求
        btn.innerHTML = "点击结束请求"
        btn.onclick = endClick
    }

    // 点击结束请求
    function endClick(){
        //清除定时器
        clearInterval(sendTimer);
        // 按钮绑定 点击结束请求
        btn.innerHTML = "开始请求"
        btn.onclick = startClick
    }

    // 按钮绑定初始化
    btn.onclick = startClick

    // 测试弹窗按钮
    let alertBtn = document.createElement("button")
    alertBtn.style.float="left"
    alertBtn.innerHTML = "测试弹窗按钮"
    alertBtn.onclick = function () {
        GM_notification({text: "快点回来签到"});
    };

    let timer = setInterval(() => {
        if (document.querySelector(".headerCard") !== null) {
            document.querySelector(".headerCard").append(btn);
            document.querySelector(".headerCard").append(log);
            //document.querySelector(".headerCard").append(alertBtn);
            // 找到了挂载点则清空当前定时器
            console.log("按钮已挂载")
            clearInterval(timer);
        }
    }, 1000);

    // Your code here...
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址