脚本喵-刷课脚本分享 脚本喵-刷课脚本分享
首页
刷课脚本
通用教程
网课代学
首页
刷课脚本
通用教程
网课代学
  • 山东省教师教育网刷课脚本分享
  • 北京市继续医学教育全员必修课培训刷课脚本分享
  • 好医生刷课脚本分享
  • 融学国培网chinahrt.com刷课脚本分享
  • 华医网刷课脚本分享
  • 59iedu华博教育系列刷课脚本分享
  • 安溪县中小学、幼儿园教师远程继续教育培训刷课脚本分享
  • 福建省交通运输行业专业技术人员继续教育刷课脚本分享
  • 漳州开放大学非学历培训平台刷课脚本分享
  • 莆田市专业技术人员继续教育公需课培训平台刷课脚本分享
  • 永泰县专业技术人员继续教育网络培训平台刷课脚本分享
  • 四川信息通信人才在线教育平台刷课脚本分享
  • 巴中建设行业从业人员继续教育网络培训平台刷课脚本分享
  • 扬州市网络培训远程教育平台刷课脚本分享
  • 江苏省勘察设计行业继续教育网络培训平台刷课脚本分享
  • 华博教育-甘肃省天水市刷课脚本分享
  • 永安市教师进修校继续教育网络平台刷课脚本分享
  • 平潭综合实验区专业技术人员继续教育网络平台刷课脚本分享
  • 淮安市专业技术人员继续教育网刷课脚本分享
  • 宿迁市专业技术人才继续教育基地刷课脚本分享
  • 莆田市专业技术人员继续教育培训平台刷课脚本分享
  • 甘肃省专技(武威市)刷课脚本分享
  • 闽清县专业技术人员继续教育网络平台刷课脚本分享
  • 华博教育-甘肃省庆阳市刷课脚本分享
  • 福州市教师网络培训平台刷课脚本分享
  • 河南专技学习网刷课脚本分享
  • 广安市建筑技术培训中心刷课脚本分享
  • 甘肃省白银市(卫生行业)专技刷课脚本分享
  • 华博教育-甘肃省定西市刷课脚本分享
  • 福建省专业技术人员继续教育网络平台刷课脚本分享
  • 福建省专业技术人员继续教育基地刷课脚本分享
  • 福建省专业技术与管理人员继续教育刷课脚本分享
  • 甘肃省直专技刷课脚本分享
  • 华博教育-甘肃省陇南市刷课脚本分享
  • 华博教育-甘肃省临夏回族自治州刷课脚本分享
  • 甘肃省嘉峪关专技刷课脚本分享
  • 华博教育-甘肃省白银市刷课脚本分享
  • 八冶建设集团有限公司专业技术人员继续教育刷课脚本分享
  • 德化县专业技术人员继续教育学习网刷课脚本分享
  • 华博教育-金昌市刷课脚本分享
  • 华博教育-甘肃省甘南藏族自治州刷课脚本分享
  • 华博教育-酒泉市刷课脚本分享
  • 漳州职业技术学院专业技术人员继续教育刷课脚本分享
  • 福建省工艺美术专业技术人员继续教育刷课脚本分享
  • 福清市医院专业人员继续教育刷课脚本分享
  • 芯华集成电路人才培训中心专业技术人员继续教育刷课脚本分享
  • 华博教育-河南省会计人员继续教育刷课脚本分享
  • 南平市网络培训远程教育平台刷课脚本分享
  • 大众云学yxlearning系列刷课脚本分享
  • 济南职业学院职业技能提升网络培训平台刷课脚本分享
  • 山东理工职业学院继续教育平台刷课脚本分享
  • 兰州现代职业学院专业技术人员继续教育刷课脚本分享
  • 淄博市专业技术人员继续教育刷课脚本分享
  • 枣庄市专业技术人员继续教育刷课脚本分享
  • 滨州市专业技术人员继续教育刷课脚本分享
  • 新疆生产建设兵团专业技术人员继续教育刷课脚本分享
  • 山东省威海市专业技术人员继续教育刷课脚本分享
  • 山东药品食品职业学院继续教育刷课脚本分享
  • 山东科技职业学院专业技术人员网络学习平台刷课脚本分享
  • 新泰市职业技能提升网络培训平台刷课脚本分享
  • 山东烟台市专业技术人员继续教育刷课脚本分享
  • 济宁市专业技术人员继续教育刷课脚本分享
  • 山东水利行业专业技术人员继续教育刷课脚本分享
  • 山东省大数据工程专业技术人员培训平台刷课脚本分享
  • 临沂市交通运输行业专业技术人员继续教育刷课脚本分享
  • 鲁东大学专业技术人员继续教育刷课脚本分享
  • 临沂市职业技能培训线上平台刷课脚本分享
  • 东营市专业技术人员继续教育刷课脚本分享
  • 大众云学职业技能提升公共服务平台刷课脚本分享
  • 山东交通职业学院专业技术人员继续教育刷课脚本分享
  • 吉林省专业技术人员继续教育培训平台刷课脚本分享
  • 山东大众云学省级继续教育基地刷课脚本分享
  • 威海市职业技能提升网络培训平台刷课脚本分享
  • 山东化工职业学院专业技术人员继续教育刷课脚本分享
  • 山东省快递工程专业技术人员继续教育刷课脚本分享
  • 兵团思想政治工作人员继续教育刷课脚本分享
  • 武威职业学院专业技术人员继续教育刷课脚本分享
  • 日照市专业技术人员继续教育刷课脚本分享
  • 济宁职业技术学院专业技术人员继续教育刷课脚本分享
  • 龙岩市专业技术人员继续教育培训平台刷课脚本分享
  • 潍城区委党校专业技术人员继续教育刷课脚本分享
  • 新疆生产建设兵团残疾人技能提升与创业就业服务平台刷课脚本分享
  • 德州市专业技术人员继续教育刷课脚本分享
  • 泰安市专业技术人员继续教育刷课脚本分享
  • 聊城职业技术学院专业技术人员继续教育刷课脚本分享
  • 内蒙古网络学院刷课脚本分享
  • 凉山州专业技术人员继续教育刷课脚本分享
  • 医世界-医视在线刷课脚本分享
  • 安徽继续教育在线刷课脚本分享
  • 新版陕西省专业技术人员继续教育刷课脚本分享
  • 安徽省卫生从业人员培训平台刷课脚本分享
  • 国家药品安全专业技术人员培训网刷课脚本分享
  • 学习公社刷课脚本
  • 中山教师教育网刷课脚本
  • 浙江省安全生产网络学院刷课脚本
  • 智慧教育培训管理平台刷课脚本
  • 中国医师协会远程教育平台刷课脚本
  • 学达云刷课脚本
  • 数字党校培训平台刷课脚本
  • 广州市中小学教师继续教育网刷课脚本
  • 甘肃省公务员网络培训刷课脚本
  • 聊城市专业技术人员继续教育刷课脚本
  • 医博士刷课脚本
  • 甘肃法宣在线刷课脚本
  • 东奥会计刷课脚本
  • 丽水市建设行业人才继续教育平台刷课脚本
  • 山财培训网刷课脚本
  • 东营市继续教育刷课脚本
  • 河南教师培训网刷课脚本
  • 南京市专业技术人员继续教育刷课脚本
  • 广州东方职业技术培训中心执业药师继续教育刷课脚本
  • 包头市专业技术人员继续教育刷课脚本
  • 内蒙古自治区专业技术人员继续教育刷课脚本
  • 丽水人力社保专业技术人员继续教育培训刷课脚本
  • 北京市专业技术人员公需科目刷课脚本
  • 教师专业发展培训网刷课脚本分享
  • 东财在线大连会计刷课脚本分享
  • 临沂市专业技术人员继续教育刷课脚本分享
  • 浙江水利刷课脚本分享
  • 聊城市会计人员继续教育平台刷课脚本
  • 三亚市专业技术人员继续教育网刷课脚本
  • 中华会计继续教育刷课脚本
  • 西北师范大学中小学教师远程培训网刷课脚本
  • 春宇远程培训平台刷课脚本
  • 浙江省二级建造师继续教育学习网刷课脚本分享
  • 深圳市教师教育网刷课脚本分享
  • 山西省专业技术人员继续教育网络平台刷课脚本分享
    • 督学网络学院-广东分院刷课脚本分享
    • 湖北省专业技术人员继续教育网络平台刷课脚本分享
    • 刷课脚本
    脚本喵
    目录

    山西省专业技术人员继续教育网络平台刷课脚本分享

    山西省专业技术人员继续教育网络平台

    # 脚本介绍

    该油猴脚本用于 山西省专业技术人员继续教育网络平台 的辅助看课,使用JavaScript编写,适配网址:https://shanxi.chinamde.cn/

    脚本功能如下:

    1. 视频自动播放
    2. 加速视频播放
    3. 自动完成课程测验
    4. 防止挂机超时
    5. 自动标记课程完成

    脚本安装地址:
    暂时下架

    如果不会安装脚本,请按照下面安装教程来操作。

    # 代学服务

    提示

    如需代学,请联系客服,支持闲鱼交易。

    微信联系:yizhituziang

    QQ联系:2422270452

    - img: /img/weixin.jpg
      name: 微信联系:yizhituziang
    - img: /img/qq.jpg
      name: QQ联系:2422270452
    

    # 安装教程

    # 1.安装浏览器扩展插件

    首先需要给我们的浏览器安装上脚本猫插件,这是运行所有用户脚本的基础,如果浏览器已经安装过了脚本猫或者油猴插件,那么可以跳过这一步。推荐使用edge浏览器,安装插件更方便。

    浏览器打开网址:https://docs.scriptcat.org/ (opens new window)

    这里用edge浏览器作为示范,点击 "添加到Edge浏览器"

    image-20250916183549234

    接着点击 "获取"

    image-20250916183818025

    在右上角弹出的窗口,点击 "添加扩展"

    image-20250916183841569

    等待几秒钟,会提示已经安装好脚本猫插件了。

    image-20250916183906107

    # 2.安装刷课脚本

    打开脚本安装地址后,在页面点击 "安装脚本" 按钮,接着在弹出的窗口点击 "安装" ,之后就会提示"安装成功"。

    # 3.体验脚本功能

    安装脚本后,需要重新进入学习站点,如果之前已经打开课程学习页面,那么需要刷新页面后脚本才会生效。

    # 核心代码

    (function() {
        'use strict';
        
        const PLATFORM_NAME = '山西省专业技术人员继续教育网络平台';
        const VERSION = '1.5.0';
        const LOG_PREFIX = `[${PLATFORM_NAME}]`;
        
        console.log(`${LOG_PREFIX} 脚本 v${VERSION} 已启动`);
        
        const CONFIG = {
            AUTO_PLAY: true,
            PLAYBACK_RATE: 2.0,
            AUTO_NEXT: true,
            AUTO_QUIZ: true,
            PREVENT_TIMEOUT: true,
            SIMULATE_ACTIVITY: true,
            CHECK_INTERVAL: 2000,
            ACTIVITY_INTERVAL: 60000
        };
        
        const utils = {
            log: function(...args) {
                console.log(LOG_PREFIX, ...args);
            },
            sleep: function(ms) {
                return new Promise(resolve => setTimeout(resolve, ms));
            },
            randomInt: function(min, max) {
                return Math.floor(Math.random() * (max - min + 1)) + min;
            },
            randomFloat: function(min, max) {
                return Math.random() * (max - min) + min;
            }
        };
        
        function bypassAntiCheat() {
            utils.log('正在初始化反作弊绕过...');
            
            const originalAddEventListener = EventTarget.prototype.addEventListener;
            EventTarget.prototype.addEventListener = function(type, listener, options) {
                const blockedEvents = ['visibilitychange', 'pagehide', 'blur', 'focusout'];
                if (blockedEvents.includes(type)) {
                    utils.log(`已拦截 ${type} 事件`);
                    return function() {};
                }
                return originalAddEventListener.call(this, type, listener, options);
            };
            
            const hiddenDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'hidden');
            if (hiddenDescriptor && hiddenDescriptor.configurable) {
                Object.defineProperty(document, 'hidden', {
                    get: () => false,
                    configurable: false
                });
            }
            
            const visibilityDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'visibilityState');
            if (visibilityDescriptor && visibilityDescriptor.configurable) {
                Object.defineProperty(document, 'visibilityState', {
                    get: () => 'visible',
                    configurable: false
                });
            }
            
            window.onblur = null;
            window.onfocusout = null;
            
            utils.log('反作弊绕过完成');
        }
        
        function getVideoElement() {
            const selectors = [
                'video',
                'video[src]',
                '.video-wrapper video',
                '.player video',
                '#videoPlayer video',
                '.course-video video'
            ];
            
            for (const selector of selectors) {
                const video = document.querySelector(selector);
                if (video) return video;
            }
            
            const iframes = document.querySelectorAll('iframe');
            for (const iframe of iframes) {
                try {
                    const iframeDoc = iframe.contentDocument || iframe.contentWindow.document;
                    const video = iframeDoc.querySelector('video');
                    if (video) return video;
                } catch (e) {
                    continue;
                }
            }
            
            return null;
        }
        
        function setupVideoPlayer(video) {
            if (!video) return;
            
            utils.log('正在设置视频播放器...');
            
            video.muted = false;
            
            Object.defineProperty(video, 'playbackRate', {
                configurable: true,
                enumerable: true,
                get: () => CONFIG.PLAYBACK_RATE,
                set: (value) => {
                    utils.log(`尝试设置播放速度为 ${value}x,已强制保持为 ${CONFIG.PLAYBACK_RATE}x`);
                }
            });
            
            video.addEventListener('pause', (e) => {
                if (CONFIG.AUTO_PLAY && !video.ended) {
                    utils.log('视频被暂停,正在恢复播放...');
                    setTimeout(() => {
                        video.play().catch(err => {
                            utils.log('自动播放失败:', err);
                        });
                    }, 100);
                }
            });
            
            video.addEventListener('ended', () => {
                utils.log('视频播放完成');
                if (CONFIG.AUTO_NEXT) {
                    utils.log('准备切换到下一课');
                    goToNextLesson();
                }
            });
            
            video.addEventListener('waiting', () => {
                utils.log('视频正在缓冲...');
            });
            
            if (CONFIG.AUTO_PLAY && video.paused) {
                video.play().catch(err => {
                    utils.log('初始自动播放失败:', err);
                });
            }
            
            utils.log('视频播放器设置完成');
        }
        
        function goToNextLesson() {
            utils.log('正在查找下一课按钮...');
            
            const nextButtonSelectors = [
                '.next-lesson-btn',
                '.next-chapter',
                '#nextLesson',
                '[class*="next"]',
                '[id*="next"]',
                'button:has(span:contains("下一课"))',
                'a:has(span:contains("下一章"))'
            ];
            
            for (const selector of nextButtonSelectors) {
                const btn = document.querySelector(selector);
                if (btn && !btn.disabled && btn.offsetParent !== null) {
                    utils.log('找到下一课按钮,点击中...');
                    btn.click();
                    return;
                }
            }
            
            const lessonList = document.querySelectorAll('.lesson-item, .chapter-item, .course-item');
            for (let i = 0; i < lessonList.length; i++) {
                const item = lessonList[i];
                if (item.classList.contains('active') || item.classList.contains('current') || item.classList.contains('playing')) {
                    if (i + 1 < lessonList.length) {
                        utils.log('在列表中找到下一课,点击中...');
                        lessonList[i + 1].click();
                        return;
                    }
                }
            }
            
            utils.log('未找到下一课');
        }
        
        function autoAnswerQuiz() {
            if (!CONFIG.AUTO_QUIZ) return;
            
            setInterval(() => {
                const quizContainer = document.querySelector('.quiz-container, .test-container, .question-container');
                if (!quizContainer) return;
                
                const options = quizContainer.querySelectorAll('input[type="radio"], input[type="checkbox"]');
                if (options.length > 0) {
                    utils.log('检测到测验题目,自动作答中...');
                    
                    const randomIndex = utils.randomInt(0, options.length - 1);
                    options[randomIndex].checked = true;
                    
                    const submitBtn = quizContainer.querySelector('button[type="submit"], .submit-btn, .confirm-btn, [class*="submit"]');
                    if (submitBtn) {
                        setTimeout(() => {
                            submitBtn.click();
                            utils.log('已提交答案');
                        }, 500);
                    }
                }
            }, 3000);
        }
        
        function simulateUserActivity() {
            if (!CONFIG.SIMULATE_ACTIVITY) return;
            
            const activities = [
                () => {
                    const scrollAmount = utils.randomInt(-20, 20);
                    window.scrollBy(0, scrollAmount);
                },
                () => {
                    const x = utils.randomInt(0, window.innerWidth);
                    const y = utils.randomInt(0, window.innerHeight);
                    const event = new MouseEvent('mousemove', {
                        clientX: x,
                        clientY: y,
                        bubbles: true,
                        cancelable: true
                    });
                    document.dispatchEvent(event);
                },
                () => {
                    const event = new KeyboardEvent('keydown', {
                        key: 'Control',
                        bubbles: true,
                        cancelable: true
                    });
                    document.dispatchEvent(event);
                },
                () => {
                    const x = utils.randomInt(0, window.innerWidth);
                    const y = utils.randomInt(0, window.innerHeight);
                    const event = new MouseEvent('click', {
                        clientX: x,
                        clientY: y,
                        bubbles: true,
                        cancelable: true
                    });
                    const element = document.elementFromPoint(x, y);
                    if (element && !element.closest('button') && !element.closest('a')) {
                        element.dispatchEvent(event);
                    }
                }
            ];
            
            setInterval(() => {
                const activityIndex = utils.randomInt(0, activities.length - 1);
                activities[activityIndex]();
                utils.log('模拟用户活动');
            }, CONFIG.ACTIVITY_INTERVAL);
        }
        
        function preventTimeout() {
            if (!CONFIG.PREVENT_TIMEOUT) return;
            
            setInterval(() => {
                const timeoutWarning = document.querySelector('.timeout-warning, .inactivity-warning, [class*="timeout"], [class*="inactive"]');
                if (timeoutWarning) {
                    utils.log('检测到超时警告,尝试解除');
                    const stayBtn = timeoutWarning.querySelector('button, a');
                    if (stayBtn) {
                        stayBtn.click();
                    }
                }
                
                const video = getVideoElement();
                if (video && video.paused && !video.ended) {
                    video.play().catch(() => {});
                }
            }, 5000);
        }
        
        function monitorVideo() {
            setInterval(() => {
                const video = getVideoElement();
                if (video) {
                    setupVideoPlayer(video);
                }
            }, CONFIG.CHECK_INTERVAL);
        }
        
        function init() {
            utils.log('正在初始化脚本...');
            
            bypassAntiCheat();
            monitorVideo();
            autoAnswerQuiz();
            simulateUserActivity();
            preventTimeout();
            
            utils.log('脚本初始化完成');
        }
        
        if (document.readyState === 'loading') {
            document.addEventListener('DOMContentLoaded', init);
        } else {
            init();
        }
    })();
    
    #山西省专业技术人员#继续教育网络平台
    深圳市教师教育网刷课脚本分享
    督学网络学院-广东分院刷课脚本分享

    ← 深圳市教师教育网刷课脚本分享 督学网络学院-广东分院刷课脚本分享→

    最近更新
    01
    湖北省专业技术人员继续教育网络平台刷课脚本分享
    02
    督学网络学院-广东分院刷课脚本分享
    03
    深圳市教师教育网刷课脚本分享
    更多文章>
    Copyright © 2025-2026
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式