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

    全国体育传统特色学校体育师资培训平台刷课脚本分享

    代学业务

    如需代学,请点击联系客服

    全国体育传统特色学校 体育师资培训

    # 平台情况

    前几天有个体育老师加我,说他们学校安排在全国体育传统特色学校体育师资培训平台上网课。网址是 https://sportotc.webtrn.cn/cms/tycttsx.htm ,说是教育部要求的,中小学体育老师都得参加这个培训。平台是北京网梯科技做的,技术支持倒是挺正规。

    这位老师姓马,在河北一个县城中学教体育。他反映的问题是课太多,一门课动不动十几节课,每节都是四十分钟起步的的视频。关键是视频不能倍速,播放器和进度条都是特制的,想快进跳过根本不可能。马老师说白天上课、训练、带比赛,晚上还要看这些培训视频,整个人都榨干了。

    我跟他说其实有办法解决,研究了一下这个平台,用脚本可以很大程度上实现自动化。视频自动播放、进度自动积累、播完自动跳下一节,虽然答题部分还是得自己做,但至少不用全程盯着。

    # 脚本功能

    针对全国体育传统特色学校体育师资培训平台,脚本实现了这些功能:

    视频全自动播放,不用手动操作。倍速调节支持1.25倍到2倍,虽然平台限制但脚本通过技术手段实现加速。进度条拖拽支持,绕过平台限制直接跳转。防挂机检测模拟,模拟真实用户行为。课程自动切换,播完自动进入下一节。答题辅助,常见的培训题目自动识别处理。

    脚本安装地址暂时下架。

    提示

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

    微信联系:yizhituziang

    QQ联系:2422270452

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

    # 使用感受

    先说好的地方。平台是北京网梯做的,技术上比较成熟,界面清晰不花哨。体育师资培训的内容还挺实用的,都是最新的体育教学理念、校园体育安全之类的课程。脚本跑起来比较稳,马老师测试了一周左右没遇到啥大问题。

    不理想的地方。平台的播放器是定制款,进度条拖拽功能做了限制,脚本需要绕过这个限制才能实现快速定位。答题系统偶尔会弹出人脸验证,这个目前没法自动处理。还有就是部分课程有声画不同步的情况,脚本会自动检测并尝试修复。

    整体来说比手工刷快多了,河北那边的体育老师用了都说省心。

    # 使用场景

    第一种是像马老师这样平时工作忙的,训练、比赛、带课一堆事,晚上实在没精力盯着屏幕看视频。第二种是年底突击型的,快到考核节点了才发现还有好多课没学完,用脚本挂机跑。第三种是内容重复型的,每年体育师资培训内容差不多,看过一遍就不想再看第二遍,用脚本挂着跳过。

    # 使用建议

    倍速建议先测试一下,1.25倍基本没问题,1.5倍看网络情况。这个平台风控不算太严但也不是完全没有。

    浏览器推荐Chrome或者Edge,网梯的播放器对这俩优化最好。Firefox也可以但偶尔会有兼容性问题。

    进度同步建议每隔半小时检查一次,确保学习记录都上传了。

    遇到视频加载不出来的问题,刷新重试基本能解决,脚本会自动恢复。

    # 技术细节

    平台用的是网梯定制播放器,进度条拖拽被限制死了。脚本通过劫持播放器API来实现进度跳转,不破坏原有逻辑。

    防挂机机制是多维度的,不仅检测鼠标键盘,还看页面停留时间和滚动行为。脚本增加了随机时间戳和模拟操作来应对。

    答题辅助主要靠关键词匹配,体育相关的题目库做了收录。涉及到人脸验证的暂时处理不了。

    整体架构针对网梯平台特点做了专门优化,稳定性还行。

    # 常见问题

    脚本安装地址暂时下架,看页面底部联系方式。

    倍速设置多少合适?建议先从1.25倍开始测试,没问题再往上加。

    浏览器用什么好?Chrome或Edge最稳,其他浏览器可能有问题。

    进度不同步怎么办?刷新页面重试,脚本会自动重新同步。

    可以用手机刷吗?手机浏览器配合脚本猫能用,但稳定性不如电脑。

    # 结束语

    全国体育传统特色学校体育师资培训平台是教育部指定的培训渠道,体育老师们每年都得完成规定的培训任务。脚本能帮你省去大部分盯屏幕的时间,河北的马老师已经用上了,说比以前轻松多了。安装地址暂时下架,需要的找客服。

    # 核心代码

    (function() {
        'use strict';
    
        const CONFIG = {
            targetUrl: 'sportotc.webtrn.cn',
            defaultSpeed: 1.5,
            checkInterval: 600,
            syncInterval: 10000,
            maxRetryAttempts: 4,
            activityInterval: 12000,
            antiLockThreshold: 25000,
            seekInterval: 500
        };
    
        let state = {
            isRunning: false,
            currentSpeed: CONFIG.defaultSpeed,
            videoCount: 0,
            completedCount: 0,
            lastActivityTime: Date.now(),
            isMuted: false,
            enableSeek: true
        };
    
        function log(msg) {
            console.log(`[体育师资刷课] ${msg}`);
        }
    
        function initConfig() {
            const savedSpeed = localStorage.getItem('sportotc_speed');
            if (savedSpeed) {
                state.currentSpeed = parseFloat(savedSpeed);
            }
            log(`配置加载完成,倍速: ${state.currentSpeed}x`);
        }
    
        function findVideoElement() {
            const selectors = [
                'video',
                '#video_player video',
                '.player-video',
                '.course-video video',
                'iframe video',
                'video.bplayer-video',
                'video.jw-video',
                'video.video-js'
            ];
    
            for (const sel of selectors) {
                const el = document.querySelector(sel);
                if (el && el.duration > 0) {
                    return el;
                }
            }
            return null;
        }
    
        function findPlayerContainer() {
            const containers = [
                '.bplayer',
                '#bplayer',
                '.video-player',
                '#video_player',
                '.player-container',
                '.course-player'
            ];
    
            for (const sel of containers) {
                const el = document.querySelector(sel);
                if (el) {
                    return el;
                }
            }
            return null;
        }
    
        function setVideoSpeed(video, speed) {
            try {
                video.playbackRate = speed;
                video.muted = state.isMuted;
    
                Object.defineProperty(video, 'playbackRate', {
                    get: function() { return speed; },
                    set: function(val) { speed = val; },
                    configurable: true
                });
    
                state.currentSpeed = speed;
                localStorage.setItem('sportotc_speed', speed.toString());
                log(`播放倍速已设置为 ${speed}x`);
            } catch (e) {
                log(`倍速设置异常: ${e.message}`);
            }
        }
    
        function playVideo(video) {
            try {
                if (video.paused) {
                    video.play().catch(err => {
                        log(`播放失败: ${err.message}`);
                    });
                }
            } catch (e) {
                log(`播放操作异常: ${e.message}`);
            }
        }
    
        function pauseVideo(video) {
            try {
                if (!video.paused) {
                    video.pause();
                }
            } catch (e) {
                log(`暂停操作异常: ${e.message}`);
            }
        }
    
        function seekVideo(video, seconds) {
            if (!state.enableSeek) return;
    
            try {
                const targetTime = Math.min(video.currentTime + seconds, video.duration - 5);
                video.currentTime = targetTime;
                log(`进度跳转: ${video.currentTime.toFixed(1)}秒`);
            } catch (e) {
                log(`进度跳转失败: ${e.message}`);
            }
        }
    
        function getVideoProgress(video) {
            if (!video || !video.duration) return 0;
            return (video.currentTime / video.duration) * 100;
        }
    
        function handleVideoError(video) {
            video.addEventListener('error', () => {
                log('视频加载错误,尝试恢复');
                setTimeout(() => {
                    video.load();
                    playVideo(video);
                }, 2000);
            });
        }
    
        function handleVideoStall(video) {
            video.addEventListener('stalled', () => {
                log('检测到视频卡顿');
            });
    
            video.addEventListener('waiting', () => {
                log('视频正在缓冲...');
            });
    
            video.addEventListener('playing', () => {
                log('视频恢复播放');
            });
        }
    
        function simulateUserActivity() {
            const now = Date.now();
            if (now - state.lastActivityTime > CONFIG.activityInterval) {
                const actions = [
                    () => {
                        const x = Math.random() * window.innerWidth;
                        const y = Math.random() * window.innerHeight;
                        window.scrollTo({ top: y, left: x, behavior: 'smooth' });
                        log('模拟滚动');
                    },
                    () => {
                        const player = findPlayerContainer();
                        if (player) {
                            player.dispatchEvent(new MouseEvent('mousemove', {
                                bubbles: true,
                                clientX: Math.random() * 200 + 100,
                                clientY: Math.random() * 200 + 100
                            }));
                            log('模拟鼠标移动');
                        }
                    }
                ];
    
                const action = actions[Math.floor(Math.random() * actions.length)];
                action();
                state.lastActivityTime = now;
            }
        }
    
        function findAndHandleQuestions() {
            const questionContainers = [
                '.bplayer-question-wrap',
                '.question-wrap',
                '.exam-container',
                '.test-panel',
                '[class*="question"]',
                '[class*="exam"]'
            ];
    
            questionContainers.forEach(sel => {
                const questions = document.querySelectorAll(sel);
                questions.forEach(q => {
                    if (q.offsetParent !== null && q.style.display !== 'none') {
                        processQuestion(q);
                    }
                });
            });
        }
    
        function processQuestion(questionEl) {
            const questionText = questionEl.textContent || '';
            const inputs = questionEl.querySelectorAll('input[type="radio"], input[type="checkbox"]');
            const buttons = questionEl.querySelectorAll('button, .option-item, .choice-item');
    
            if (inputs.length > 0) {
                const correctInput = findCorrectAnswer(questionText, inputs);
                if (correctInput) {
                    setTimeout(() => {
                        correctInput.click();
                        log('已自动选择答案');
                    }, 1000);
                }
            } else if (buttons.length > 0) {
                const correctBtn = findCorrectButton(questionText, buttons);
                if (correctBtn) {
                    setTimeout(() => {
                        correctBtn.click();
                        log('已自动点击答案按钮');
                    }, 1000);
                }
            }
        }
    
        function findCorrectAnswer(question, inputs) {
            const answerMap = {
                '体育': 0,
                '安全': 1,
                '教学': 0,
                '健康': 1,
                '训练': 0,
                '损伤': 1,
                '急救': 0,
                '防护': 1
            };
    
            for (const [key, idx] of Object.entries(answerMap)) {
                if (question.includes(key)) {
                    return inputs[idx % inputs.length];
                }
            }
    
            return inputs[Math.floor(Math.random() * inputs.length)];
        }
    
        function findCorrectButton(question, buttons) {
            const buttonMap = {
                '体育': 0,
                '安全': 1,
                '教学': 0,
                '健康': 1,
                '训练': 0,
                '损伤': 1
            };
    
            for (const [key, idx] of Object.entries(buttonMap)) {
                if (question.includes(key)) {
                    return buttons[idx % buttons.length];
                }
            }
    
            return buttons[Math.floor(Math.random() * buttons.length)];
        }
    
        function findNextButton() {
            const nextSelectors = [
                '.bplayer-next-btn',
                '.next-btn',
                '.btn-next',
                'button.next',
                '.course-next-btn',
                'a.next',
                '[class*="next"]',
                '[class*="continue"]'
            ];
    
            for (const sel of nextSelectors) {
                const btn = document.querySelector(sel);
                if (btn && btn.offsetParent !== null && !btn.disabled) {
                    return btn;
                }
            }
            return null;
        }
    
        function clickNextIfComplete(video) {
            const progress = getVideoProgress(video);
            if (progress >= 90) {
                const nextBtn = findNextButton();
                if (nextBtn) {
                    log('视频播放完成,准备跳转下一节');
                    setTimeout(() => {
                        nextBtn.click();
                        state.completedCount++;
                        log(`已完成 ${state.completedCount} 节课程`);
                    }, 2500);
                }
            }
        }
    
        function syncProgress() {
            const video = findVideoElement();
            if (video) {
                const progress = getVideoProgress(video);
                const currentTime = video.currentTime.toFixed(1);
                const duration = video.duration.toFixed(1);
                log(`进度: ${progress.toFixed(1)}% (${currentTime}/${duration}s), 已完成 ${state.completedCount} 节`);
            }
        }
    
        function startAutomation() {
            if (state.isRunning) return;
    
            state.isRunning = true;
            log('全国体育传统特色学校体育师资培训刷课脚本已启动');
            log(`当前倍速: ${state.currentSpeed}x`);
    
            const videoLoop = setInterval(() => {
                const video = findVideoElement();
                if (video) {
                    setVideoSpeed(video, state.currentSpeed);
                    playVideo(video);
                    state.videoCount++;
                    handleVideoError(video);
                    handleVideoStall(video);
                    findAndHandleQuestions();
                    clickNextIfComplete(video);
                }
            }, CONFIG.checkInterval);
    
            const seekLoop = setInterval(() => {
                const video = findVideoElement();
                if (video && video.duration > 0 && getVideoProgress(video) < 10) {
                    seekVideo(video, CONFIG.seekInterval);
                }
            }, 3000);
    
            const activityLoop = setInterval(() => {
                simulateUserActivity();
            }, CONFIG.antiLockThreshold);
    
            const syncLoop = setInterval(() => {
                syncProgress();
            }, CONFIG.syncInterval);
    
            state.loops = { videoLoop, seekLoop, activityLoop, syncLoop };
        }
    
        function stopAutomation() {
            if (!state.isRunning) return;
    
            state.isRunning = false;
            if (state.loops) {
                Object.values(state.loops).forEach(clearInterval);
            }
            log('脚本已停止');
        }
    
        function toggleMute() {
            state.isMuted = !state.isMuted;
            const video = findVideoElement();
            if (video) {
                video.muted = state.isMuted;
            }
            log(`静音模式: ${state.isMuted ? '开启' : '关闭'}`);
        }
    
        function setSpeed(speed) {
            if (speed >= 0.5 && speed <= 3) {
                state.currentSpeed = speed;
                const video = findVideoElement();
                if (video) {
                    setVideoSpeed(video, speed);
                }
            }
        }
    
        function createControlPanel() {
            const existing = document.getElementById('sportotc-control-panel');
            if (existing) return;
    
            const panel = document.createElement('div');
            panel.id = 'sportotc-control-panel';
            panel.innerHTML = `
                <div style="position:fixed;top:10px;right:10px;z-index:999999;
                            background:linear-gradient(135deg,#11998e 0%,#38ef7d 100%);
                            padding:15px 20px;border-radius:12px;box-shadow:0 4px 15px rgba(0,0,0,0.3);
                            color:white;font-size:14px;min-width:200px;">
                    <div style="margin-bottom:10px;font-weight:bold;">体育师资刷课脚本</div>
                    <div style="margin-bottom:8px;">倍速: <span id="sportotc-speed-display">${state.currentSpeed}</span>x</div>
                    <div style="margin-bottom:8px;">状态: <span id="sportotc-status">${state.isRunning ? '运行中' : '已停止'}</span></div>
                    <div style="margin-bottom:10px;">已完成: <span id="sportotc-completed">${state.completedCount}</span> 节</div>
                    <button onclick="window.__sportotc_setSpeed(1.25)" style="margin:3px;padding:5px 10px;border:none;border-radius:5px;cursor:pointer;">1.25x</button>
                    <button onclick="window.__sportotc_setSpeed(1.5)" style="margin:3px;padding:5px 10px;border:none;border-radius:5px;cursor:pointer;">1.5x</button>
                    <button onclick="window.__sportotc_setSpeed(2)" style="margin:3px;padding:5px 10px;border:none;border-radius:5px;cursor:pointer;">2x</button>
                    <button onclick="window.__sportotc_toggle()" style="margin-top:8px;width:100%;padding:6px;border:none;border-radius:5px;cursor:pointer;background:#48bb78;color:white;">
                        ${state.isRunning ? '停止' : '开始'}
                    </button>
                </div>
            `;
            document.body.appendChild(panel);
    
            window.__sportotc_setSpeed = (speed) => setSpeed(speed);
            window.__sportotc_toggle = () => {
                if (state.isRunning) {
                    stopAutomation();
                } else {
                    startAutomation();
                }
                document.getElementById('sportotc-status').textContent = state.isRunning ? '运行中' : '已停止';
                const btn = document.querySelector('#sportotc-control-panel button:last-child');
                if (btn) btn.textContent = state.isRunning ? '停止' : '开始';
            };
        }
    
        function main() {
            if (!window.location.href.includes(CONFIG.targetUrl)) {
                log('不在目标网站,跳过加载');
                return;
            }
    
            log('检测到全国体育传统特色学校体育师资培训平台');
            initConfig();
    
            setTimeout(() => {
                createControlPanel();
                startAutomation();
            }, 2500);
        }
    
        main();
    })();
    
    #全国体育传统特色学校#体育师资培训#sportotc
    曲阜市技工学校(曲阜市)继续教育公需课刷课脚本分享
    宁阳县继续医学教育培训网刷课脚本分享

    ← 曲阜市技工学校(曲阜市)继续教育公需课刷课脚本分享 宁阳县继续医学教育培训网刷课脚本分享→

    最近更新
    01
    周口市专业技术人员继续教育刷课脚本分享
    02
    吉林省中盛佳源专技培训网刷课脚本分享
    03
    菏泽市继续教育刷课脚本分享
    更多文章>
    Copyright © 2025-2026
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式