您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
屏蔽云课堂挂机检测脚本
// ==UserScript== // @name yuncourse // @namespace http://tampermonkey.net/ // @version 1.0 // @description 屏蔽云课堂挂机检测脚本 // @author Vstay // @match *://*.yunxuetang.cn/* // @icon https://yunketang.cn/static/images/[email protected] // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // 添加防抖函数 function debounce(func, wait) { let timeout; return function executedFunction(...args) { const later = () => { clearTimeout(timeout); func(...args); }; clearTimeout(timeout); timeout = setTimeout(later, wait); }; } // 添加错误计数器 let errorCount = 0; const MAX_ERRORS = 5; var time = getTimes(); var str = "display: none;"; var str2 = "dialog-fade-leave"; var play_btn = 0; var continue_to_learn = 0; var elem = 0; var congratulate_str = 0; let obj = { 'autoplay': true, 'muted': true }; console.log('It\'s running Now'); // 主要检测函数 const mainCheck = async () => { try { var i = 0; var j = 0; var RootNode = 0; var finishsign = 0; var next_course = 0; var next_course2 = 0; var begin_to_learn = 0; var lesson_finish = 0; var courses = 0; var courses_length = 0; var lesson_num = 0; // 开始学习按钮 // v1.0旧版 // begin_to_learn = document.getElementsByClassName("kngpc-playbutton kngpc-playbutton__primary"); // v2.0新版 begin_to_learn = document.getElementsByClassName("yxtf-button yxtf-button--primary yxtf-button--larger"); if (begin_to_learn != 0) { if (begin_to_learn.length != 0) { begin_to_learn[0].click(); } } play_btn = document.querySelector('video'); finishsign = document.getElementsByClassName("yxtulcdsdk-course-player__countdown standard-size-12 yxtulcdsdk-flex-center"); // 旧版需要判断当前任务完成,关闭评价,点击下一任务 // v2.0新版直接判断剩余时间,学习时间结束,点击下一任务 if (finishsign.length == 0) { next_course = document.getElementsByClassName("yxtf-button ml12 yxtf-button--default is-plain is-icon")[0]; next_course2 = document.getElementsByClassName("ulcdsdk-nextchapterbutton")[0]; sleep(1000); next_course.click(); sleep(1000); next_course2.click(); sleep(1000); // 发现点击之后需要刷新,v1.1修复bug location.reload(); } // 判断当前小节已完成,跳转到下一小节 lesson_finish = document.getElementsByClassName("yxtbiz-language-slot"); // 重新学习按钮不点击,不会显示完成进度。v1.4修复bug try { congratulate_str = document.getElementsByClassName("font-size-16 text-bf")[0].innerText; } catch (e) { } // 获取所有小节元素 courses = document.getElementsByClassName("d-in-block ellipsis-2 kng-chapter-title"); courses_length = courses.length; if (lesson_finish.length === 0) { // 修复对课程完成的判断,小版本更新v1.3 if (congratulate_str === '恭喜您已完成本课程的学习。') { console.log("lesson finished"); lesson_num = get_current_lesson_num(courses); if (lesson_num + 1 < courses_length) { courses[lesson_num + 1].click(); } else { //如果小节看完自动跳转到下一任务,小版本更新v1.2 next_course = document.getElementsByClassName("yxtf-button yxtf-button--primary")[0]; next_course.click(); } } } elem = document.getElementsByClassName("yxt-dialog__wrapper"); // v1.0旧版判断是否有“继续学习”按钮,点击后判断视频是否在播放状态,使视频播放 // continue_to_learn = document.getElementsByClassName("yxtf-button mr8 yxtf-button--primary yxtf-button--larger2"); // v2.0新版 continue_to_learn = document.getElementsByClassName("yxtf-button yxtf-button--primary yxtf-button--large"); // 点击“继续学习”按钮 if (continue_to_learn[0] != undefined) { continue_to_learn[0].click(); } // 使视频播放(添加属性,防止chrome报错),使用try...catch丢弃报错 try { play_btn.setAttribute('autoplay', 'true'); play_btn.setAttribute('muted', 'true'); if (play_btn.paused) { play_btn.play(); } } catch (e) { } // 循环找到挂机检测弹窗节点 for (i = 0; i < elem.length; i++) { if (elem[i].attributes[2] != undefined) { if (elem[i].attributes[2].nodeValue.indexOf(str) == -1) { // 发现bug,添加一个判断 if (elem[i].attributes[1].nodeValue.indexOf(str2) == -1) { RootNode = elem[i]; console.log(RootNode); } } } } if (RootNode === 0) { console.log("no alert. dialog-center display none."); return; } var btn = RootNode.getElementsByClassName("dialog-footer")[0]; var center = document.getElementsByClassName("dialog-center"); console.log("触发挂机弹窗"); if (!btn) { console.log("dialog-footer classname elements not found."); return; } var res = btn.innerText; console.log(res); if (res != "继续学习") { btn = document.getElementsByClassName("dialog-footer")[2]; } console.log("点击继续学习"); // 点击继续学习按钮 btn.getElementsByClassName("yxtf-button yxtf-button--primary yxtf-button--large")[0].click(); // 重置错误计数 errorCount = 0; } catch (error) { console.error('检测过程出错:', error); errorCount++; // 如果错误次数过多,重新加载页面 if (errorCount >= MAX_ERRORS) { console.log('错误次数过多,准备重新加载页面...'); location.reload(); return; } } }; // 使用防抖包装主检测函数 const debouncedCheck = debounce(mainCheck, 1000); // 修改interval的调用方式 var tm = setInterval(debouncedCheck, time); // 添加清理函数 window.addEventListener('beforeunload', () => { clearInterval(tm); }); })(); function getTimes() { var times = Math.random() * 8 + 1;//1-9 times = 5 * 1000 * 1;//+times*10 return times } function get_current_lesson_num(courses) { var courses_length = 0; courses_length = courses.length; if (courses_length > 0) { for (var i = 0; i < courses_length; i++) { if (courses[i].className.indexOf("color-primary-6") != -1) { return i; } } } else { return 0; } } // 修改sleep函数 function sleep(time) { return new Promise((resolve) => { const timeout = setTimeout(resolve, time); // 添加清理机制 window.addEventListener('beforeunload', () => { clearTimeout(timeout); }); }); }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址