脚本喵-刷课脚本分享 脚本喵-刷课脚本分享
首页
刷课脚本
通用教程
网课代学
首页
刷课脚本
通用教程
网课代学
  • 曲阜市技工学校(曲阜市)继续教育公需课刷课脚本分享
  • 全国体育传统特色学校体育师资培训平台刷课脚本分享
  • 宁阳县继续医学教育培训网刷课脚本分享
  • 陕西干部网络学院刷课脚本分享
  • 职业成长自动轮播学习脚本分享
  • 和田地区专业技术人员继续教育刷课脚本分享
  • 合肥市中小学、幼儿园教师远程培训刷课脚本分享
  • 内蒙古自治区中医药(蒙医药)继续教育刷课脚本分享
  • 自贡市专业技术人员继续教育学习平台刷课脚本分享
  • 专业技术人才人工智能通识继续教育网络公益课堂刷课脚本分享
  • 周口市专业技术人员继续教育刷课脚本分享
  • 吉林省中盛佳源专技培训网刷课脚本分享
  • 菏泽市继续教育刷课脚本分享
  • 国家中小学智慧教育平台刷课脚本分享
  • 滁州市专业技术人员继续教育刷课脚本分享
  • 新疆医学教育网刷课脚本分享
  • 潍坊科技学院继续教育刷课脚本分享
  • 韶关市中小学教师培训平台刷课脚本分享
  • 广西柳州事业单位工作人员培训刷课脚本分享
  • 昌吉州教育云刷课脚本分享
  • 温州市住房和城乡建设行业专业技术人员继续教育刷课脚本分享
  • 广西教师培训管理信息系统刷课脚本分享
  • 成都继续医学教育平台刷课脚本分享
  • 乌兰浩特市专业技术人员继续教育刷课脚本分享
  • 乌鲁木齐职业大学教师培训刷课脚本分享
  • 伊犁师范大学继续教育学院刷课脚本分享
    • 汶上县委党校公需课刷课脚本分享
    • 西北大学现代学院教师在线学习刷课脚本分享
    • 沈阳理工大学教师发展中心刷课脚本分享
    • 刷课脚本
    脚本喵
    目录

    伊犁师范大学继续教育学院刷课脚本分享

    代学业务

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

    伊犁师范大学继续教育 ketangx.net

    # 平台情况

    伊犁师范大学继续教育学院学生学习平台,网址 https://ylnu.ketangx.net/learn/login ,伊犁这边参加继续教育的朋友应该都用过。这个平台是课堂在线的框架,给伊犁师范大学的继续教育学员做在线学习用,公需课专业课都有,每年得刷够学时。

    上礼拜伊犁哈萨克自治州的老张微信找我,说他在伊宁市某中学教语文,这个平台的课让他很崩溃。老张平时带两个班的课,还当班主任,早上六点多就得起床盯早自习,晚上查完宿舍都十点多了,根本没时间坐电脑前刷课。

    老张跟我吐槽说,有回他周末好不容易有点空,打开平台看了两集,中间接了个家长电话回来,发现视频停了,之前看的进度也没保存住,等于白看。他说这个平台的视频播放器不太好用,没有自动连播功能,每集看完得手动点下一集。而且长时间不操作它会判定你不在线,直接给你暂停播放。那天早上我刚喝完豆浆就想到这个办法,赶紧给他研究了一下。

    我登录平台看了看,这个网站是课堂在线的ketangx系统,界面风格比较传统。培训课程方面,继续教育的课程量不小,每门课好几集视频,全部看完才能拿到学时。

    # 脚本功能

    针对伊犁师范大学继续教育平台的特点,脚本实现了以下功能:

    视频自动播放,打开课程页面后自动开始播放,不用手动点。自动切换下一节,检测到视频快播完时自动跳到下一个。防掉线模拟,定期模拟鼠标移动,避免系统判定长时间无操作。倍速调节,1倍到2倍速可选。进度实时显示,控制面板上能看到当前状态和已完成数量。课程列表智能识别,自动跳过已经完成的章节。

    脚本安装地址: 暂时下架

    # 代学服务

    提示

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

    微信联系:yizhituziang

    QQ联系:2422270452

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

    # 使用感受

    老张用了快两周了,跟我说省心多了。现在他上班前把浏览器挂着,中午在办公室看一眼进度,下班的时候基本就把当天的任务跑完了。他说再也不用半夜守着电脑一集一集点了,之前那种困得眼睛都睁不开还得盯着切换下一集的日子终于结束了。

    不过有个事得说一下,伊犁师范大学继续教育有些课程后面带在线考核或者作业提交,脚本暂时帮不了你,得自己做。还有如果你们学校要求人脸核验或者实名认证,那也得自己来。老张说他大部分视频课都能自动刷,就几门带考核的自己做了。

    对了,老张还说了个事,用脚本的时候浏览器窗口不能最小化,得开着挂着。他之前最小化过一次,回来发现视频停了,后来就一直开着窗口缩小放旁边,再没出过问题。

    # 使用场景

    白天上课晚上还要备课的,像老张那样忙得团团转的。课程内容之前就学过的,走个流程拿学时。想省时间早点完成培训任务的,开个1.5倍速挂着跑效率高。

    # 技术细节

    伊犁师范大学继续教育平台用的是ketangx课堂在线框架,界面风格比较传统。脚本通过定时检测video元素状态来判断播放进度,配合课程列表的DOM结构找到下一节。

    防掉线这块比较关键,因为平台对长时间不操作检测比较严格。脚本会生成随机鼠标移动轨迹,间隔时间也做了随机化处理,不会太规律被系统发现。另外加了视频暂停检测,如果视频意外停止会自动尝试恢复播放。还有个问题,这个平台有时候视频加载比较慢,脚本加了等待机制,不会因为加载慢就误判。

    整体方案针对伊犁师范大学继续教育平台做了专门适配,老张用了两周基本没出什么问题。

    # 结束语

    伊犁师范大学继续教育学院平台是伊犁地区教师每年都要用的,老张之前为了刷课经常熬到半夜,用了脚本之后终于不用专门守在电脑前了。新疆这边教师本来工作就忙,脚本能帮你省去大部分盯屏幕的时间,让你能把精力放在教学上。

    # 核心代码

    (function() {
        'use strict';
    
        var YL = {
            site: 'ylnu.ketangx.net',
            tickMs: 2500,
            hopMs: 3800,
            pulseMs: 13000,
            endPct: 91,
            key: 'ylnu_auto_cfg'
        };
    
        var S = {
            go: false,
            num: 0,
            spd: 1.0,
            lastPulse: Date.now(),
            ghost: 0,
            lagCnt: 0,
            prevPct: 0,
            stallCnt: 0
        };
    
        function say(t) { console.log('[伊犁师范] ' + t); }
    
        function fetch() {
            var raw = localStorage.getItem(YL.key);
            if (raw) { try { S.go = JSON.parse(raw).on !== false; } catch(x) { S.go = true; } }
            else { S.go = true; }
        }
    
        function push() {
            localStorage.setItem(YL.key, JSON.stringify({ on: S.go, spd: S.spd }));
        }
    
        function wake() {
            fetch();
            if (S.go) { say('伊犁师范继续教育自动学习已启动'); tick(); }
            ui();
        }
    
        function grabVid() {
            var ss = ['video', '#vPlayer video', '.course-video video',
                '.train-video video', '.video-js video', '.vjs-tech', 'video.ketangx-player'];
            for (var i = 0; i < ss.length; i++) {
                var e = document.querySelector(ss[i]);
                if (e && e.duration > 0 && e.offsetParent !== null) return e;
            }
            return null;
        }
    
        function grabWrap() {
            var ss = ['#vPlayer', '.course-player', '.train-player',
                '.video-box', '.player-wrap', '.ketangx-player'];
            for (var i = 0; i < ss.length; i++) {
                var e = document.querySelector(ss[i]);
                if (e) return e;
            }
            return document.body;
        }
    
        function ratio(v) {
            if (!v || !v.duration) return 0;
            return (v.currentTime / v.duration) * 100;
        }
    
        function roll(v) {
            if (!v) return false;
            try {
                if (v.paused) {
                    var r = v.play();
                    if (r && r.catch) r.catch(function() { v.muted = true; v.play().catch(function(){}); });
                }
                return true;
            } catch(e) { return false; }
        }
    
        function gear(v, s) {
            if (!v) return;
            try { v.playbackRate = s; S.spd = s; say('倍速调整为 ' + s + 'x'); }
            catch(e) { say('倍速设置出错'); }
        }
    
        function heartbeat() {
            var t = Date.now();
            if (t - S.lastPulse > YL.pulseMs) {
                var w = grabWrap(), r = w.getBoundingClientRect();
                var cx = r.left + Math.random() * r.width;
                var cy = r.top + Math.random() * r.height;
                document.dispatchEvent(new MouseEvent('mousemove', {
                    clientX: cx, clientY: cy, bubbles: true
                }));
                setTimeout(function() {
                    document.dispatchEvent(new MouseEvent('click', {
                        clientX: cx, clientY: cy, bubbles: true
                    }));
                }, 420);
                S.lastPulse = t;
                say('心跳模拟完成,保持在线');
            }
        }
    
        function findNext() {
            var qs = ['.next-btn', '.btn-next', '.next-chapter', '[class*="next"]'];
            for (var i = 0; i < qs.length; i++) {
                var bs = document.querySelectorAll(qs[i]);
                for (var j = 0; j < bs.length; j++) {
                    if (bs[j].offsetParent !== null && !bs[j].disabled) return bs[j];
                }
            }
            return null;
        }
    
        function chapters() {
            return document.querySelectorAll(
                '.chapter-item,.lesson-item,.course-section,.section-row,.catalog-node'
            );
        }
    
        function ok(el) { return el.querySelector('.finished,.done,.complete,.pass') !== null; }
        function now(el) { return el.classList.contains('active') || el.classList.contains('current'); }
    
        function hop() {
            var btn = findNext();
            if (btn) { btn.click(); S.num++; say('切换下一节,已完成 ' + S.num + ' 节'); setTimeout(tick, YL.hopMs); return; }
            var ls = chapters(), hit = false;
            for (var i = 0; i < ls.length; i++) {
                if (now(ls[i])) { hit = true; continue; }
                if (hit && !ok(ls[i])) { ls[i].click(); S.num++; say('跳转到下一未完成章节'); setTimeout(tick, YL.hopMs); return; }
            }
            say('所有章节已完成');
        }
    
        function waitLoad(v) {
            if (v.readyState < 3) {
                S.lagCnt++;
                if (S.lagCnt > 10) { say('视频加载较慢,继续等待...'); S.lagCnt = 0; }
                return false;
            }
            S.lagCnt = 0;
            return true;
        }
    
        function chkStall(p) {
            if (Math.abs(p - S.prevPct) < 0.1) {
                S.stallCnt++;
                if (S.stallCnt > 10) { say('进度可能卡住,刷新页面'); S.stallCnt = 0; location.reload(); }
            } else { S.stallCnt = 0; }
            S.prevPct = p;
        }
    
        function tick() {
            var v = grabVid();
            if (!v) {
                S.ghost++;
                if (S.ghost > 16) say('找不到视频元素,请确认在课程页面');
                setTimeout(tick, YL.tickMs); return;
            }
            S.ghost = 0;
            if (!waitLoad(v)) { setTimeout(tick, YL.tickMs + 1000); return; }
            roll(v);
            var p = ratio(v);
            chkStall(p);
            if (p >= YL.endPct) { say('视频播放至 ' + p.toFixed(1) + '%,准备跳转'); hop(); return; }
            heartbeat();
            setTimeout(tick, YL.tickMs);
        }
    
        function ui() {
            if (document.getElementById('yl-panel')) return;
            var el = document.createElement('div');
            el.id = 'yl-panel';
            el.style.cssText = 'position:fixed;top:120px;right:20px;width:210px;background:#fff;border-radius:8px;box-shadow:0 2px 12px rgba(0,0,0,0.15);padding:16px;z-index:99999;font-size:14px;';
            el.innerHTML = '<div style="font-weight:bold;margin-bottom:12px;color:#333;">伊犁师范自动刷课</div>' +
                '<div style="margin-bottom:8px;"><span style="color:#666;">状态:</span><span id="yl-st" style="color:#52c41a;">运行中</span></div>' +
                '<div style="margin-bottom:8px;"><span style="color:#666;">完成:</span><span id="yl-dn" style="color:#1890ff;">0</span> 节</div>' +
                '<div style="margin-bottom:12px;"><span style="color:#666;">倍速:</span><select id="yl-sp" style="padding:2px 6px;border-radius:4px;"><option value="1">1倍速</option><option value="1.5" selected>1.5倍速</option><option value="2">2倍速</option></select></div>' +
                '<button id="yl-tg" style="width:100%;padding:8px;background:#ff4d4f;color:#fff;border:none;border-radius:4px;cursor:pointer;">停止脚本</button>';
            document.body.appendChild(el);
            document.getElementById('yl-sp').onchange = function() {
                S.spd = parseFloat(this.value);
                var v = grabVid(); if (v) gear(v, S.spd); push();
            };
            document.getElementById('yl-tg').onclick = function() {
                S.go = !S.go;
                this.textContent = S.go ? '停止脚本' : '启动脚本';
                this.style.background = S.go ? '#ff4d4f' : '#52c41a';
                document.getElementById('yl-st').textContent = S.go ? '运行中' : '已停止';
                document.getElementById('yl-st').style.color = S.go ? '#52c41a' : '#999';
                push(); if (S.go) { say('脚本重新启动'); tick(); }
            };
            setInterval(function() { var e = document.getElementById('yl-dn'); if (e) e.textContent = S.num; }, 2000);
        }
    
        if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', wake);
        else wake();
    })();
    
    #伊犁#ketangx.net#继续教育#教师培训
    乌鲁木齐职业大学教师培训刷课脚本分享
    汶上县委党校公需课刷课脚本分享

    ← 乌鲁木齐职业大学教师培训刷课脚本分享 汶上县委党校公需课刷课脚本分享→

    最近更新
    01
    汶上县委党校公需课刷课脚本分享
    02
    西北大学现代学院教师在线学习刷课脚本分享
    03
    沈阳理工大学教师发展中心刷课脚本分享
    更多文章>
    Copyright © 2025-2026
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式