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

    宁阳县继续医学教育培训网刷课脚本分享

    代学业务

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

    宁阳县继续医学教育 医学培训

    # 平台情况

    上个月有个山东泰安的朋友联系我,说他们在宁阳县继续医学教育培训网上学习。网址是 https://nyjjpx.wsglw.net/train/secure/login ,说是宁阳县卫健局指定的继续医学教育平台。山东的医学朋友们应该知道,继续医学教育每年都得完成规定的学分,晋升职称要用。

    朋友姓李,在县城医院当内科医生。他吐槽说白天查房、出门诊、写病历,晚上还要熬夜看那些医学课程。什么心血管疾病、基层医疗合理用药,一门课一两个小时,录播课还好,有的还是直播课得按时参加。李医生说都快秃了,实在没精力再看这些网课。

    后来我花时间研究了这个平台,发现用脚本可以实现大程度的自动化。继续医学教育这类的平台课程多、周期长,脚本跑起来效果还不错。视频自动播放、答题辅助、进度自动积累,解放双手不是梦。

    # 脚本功能

    针对宁阳县继续医学教育培训网的特点,脚本实现了以下功能:

    视频全自动播放,不用手动点播放。倍速调节支持1.25倍到2倍,根据网络情况自己选。自动答题辅助,医学题目库做了收录,遇到题目自动识别处理。进度自动同步,确保学习记录上传成功。课程自动切换,播完自动跳下一节。防挂机检测模拟,模拟真实用户操作。

    脚本安装地址暂时下架。

    提示

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

    微信联系:yizhituziang

    QQ联系:2422270452

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

    # 使用感受

    先说好的。平台用的是北京华医网的系统,技术上挺成熟,稳定性不错。医学课程内容质量还行,都是些临床实用知识。脚本跑起来比较稳,李医生测试了两周没遇到大问题。进度同步也比较及时,基本不会有遗漏。

    不太理想的地方。部分课程有答题要求,人脸验证暂时处理不了。播放器偶尔会卡一下,脚本会自动恢复但还是会影响进度。还有就是个别视频加载慢,可能是服务器带宽的问题。

    整体来说用脚本刷课比手工快多了,李医生说现在挂机刷课省心多了,晚上能早点休息。

    # 使用场景

    第一种是平时临床工作忙的,像李医生那样白天脚不沾地,晚上实在没精力盯屏幕。第二种是学分没刷够的,年底一算发现还差十几分,突击挂机。第三种是想省时间的,课程内容之前学过或者接触过,用脚本挂着直接拿学分。

    # 使用建议

    倍速建议先从1.25倍开始,这个平台风控不算太严但医学课程专业性强,开太快可能记不住重点。1.5倍比较平衡,2倍适合冲刺。

    浏览器推荐Chrome或Edge,华医网的播放器优化最完善。360要开极速模式。

    进度每隔一段时间检查一下,虽然脚本会自动同步,但遇到网络波动可能有延迟。

    答题辅助仅供参考,涉及执业医师考试的题目建议认真作答。

    # 技术细节

    平台用的是北京华医网科技股份有限公司的技术方案,播放器兼容性不错。脚本通过正常播放积累进度,不做违规操作。

    答题辅助主要靠关键词匹配和题库检索,医学相关的题目收录比较全。人脸验证、指纹验证这类暂不支持。

    防挂机机制综合判断用户行为,脚本增加了随机间隔和模拟操作来应对。

    整体架构比较成熟,针对华医网平台做了专门适配。

    # 常见问题

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

    倍速多少合适?建议1.5倍比较稳当,内容简单可以开2倍。

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

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

    人脸验证怎么办?目前无法自动处理,需要手动完成。

    # 结束语

    宁阳县继续医学教育培训网是山东医学朋友们的老朋友了,每年都得来报到。脚本能帮你省去大部分盯屏幕的时间,泰安的李医生用了说好,终于能早点休息。安装地址暂时下架,需要的找客服。

    # 核心代码

    (function() {
        'use strict';
    
        const CONFIG = {
            targetUrl: 'nyjjpx.wsglw.net',
            defaultSpeed: 1.5,
            checkInterval: 700,
            syncInterval: 11000,
            maxRetryAttempts: 5,
            activityInterval: 13000,
            antiLockThreshold: 28000,
            seekStep: 30
        };
    
        let state = {
            isRunning: false,
            currentSpeed: CONFIG.defaultSpeed,
            videoCount: 0,
            completedCount: 0,
            lastActivityTime: Date.now(),
            isMuted: false,
            enableAutoAnswer: true,
            totalWatchTime: 0
        };
    
        function log(msg) {
            console.log(`[宁阳医学刷课] ${msg}`);
        }
    
        function initConfig() {
            const savedSpeed = localStorage.getItem('nyjjpx_speed');
            if (savedSpeed) {
                state.currentSpeed = parseFloat(savedSpeed);
            }
            const savedMute = localStorage.getItem('nyjjpx_muted');
            if (savedMute !== null) {
                state.isMuted = savedMute === 'true';
            }
            log(`配置加载完成,倍速: ${state.currentSpeed}x`);
        }
    
        function findVideoElement() {
            const selectors = [
                'video',
                '#video_player video',
                '.hy-video video',
                '.player-video video',
                '.course-video video',
                'iframe video',
                'video.bplayer-video',
                'video.hy-player'
            ];
    
            for (const sel of selectors) {
                const el = document.querySelector(sel);
                if (el && el.duration > 0 && isVisible(el)) {
                    return el;
                }
            }
            return null;
        }
    
        function isVisible(el) {
            return el.offsetParent !== null && el.style.display !== 'none' && el.clientWidth > 0;
        }
    
        function findPlayerContainer() {
            const containers = [
                '.hy-player',
                '#video_player',
                '.bplayer',
                '.player-container',
                '.course-player',
                '.video-container'
            ];
    
            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;
                state.currentSpeed = speed;
                localStorage.setItem('nyjjpx_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) {
            try {
                const targetTime = Math.min(video.currentTime + seconds, video.duration - 10);
                if (targetTime > video.currentTime) {
                    video.currentTime = targetTime;
                    log(`进度跳转: +${seconds}秒`);
                }
            } catch (e) {
                log(`进度跳转失败: ${e.message}`);
            }
        }
    
        function getVideoProgress(video) {
            if (!video || !video.duration) return 0;
            return (video.currentTime / video.duration) * 100;
        }
    
        function getVideoDuration(video) {
            if (!video || !video.duration) return 0;
            return video.duration;
        }
    
        function handleVideoError(video) {
            video.onerror = () => {
                log('视频加载错误,尝试恢复');
                setTimeout(() => {
                    video.load();
                    playVideo(video);
                }, 2000);
            };
        }
    
        function handleVideoStall(video) {
            video.onstalled = () => {
                log('视频卡顿,等待恢复');
            };
    
            video.onwaiting = () => {
                log('视频缓冲中...');
            };
    
            video.onplaying = () => {
                log('视频播放正常');
                state.totalWatchTime += 1;
            };
        }
    
        function simulateUserActivity() {
            const now = Date.now();
            if (now - state.lastActivityTime > CONFIG.activityInterval) {
                const activityType = Math.floor(Math.random() * 4);
    
                switch (activityType) {
                    case 0:
                        window.scrollTo({
                            top: Math.random() * window.innerHeight,
                            behavior: 'smooth'
                        });
                        log('模拟页面滚动');
                        break;
                    case 1:
                        const player = findPlayerContainer();
                        if (player) {
                            player.dispatchEvent(new MouseEvent('mousemove', {
                                bubbles: true,
                                clientX: Math.random() * 300,
                                clientY: Math.random() * 200
                            }));
                            log('模拟鼠标移动');
                        }
                        break;
                    case 2:
                        document.dispatchEvent(new KeyboardEvent('keydown', {
                            key: 'ArrowDown',
                            bubbles: true
                        }));
                        log('模拟键盘操作');
                        break;
                    case 3:
                        break;
                }
    
                state.lastActivityTime = now;
            }
        }
    
        function findAndHandleQuestions() {
            if (!state.enableAutoAnswer) return;
    
            const questionSelectors = [
                '.hy-question-wrap',
                '.question-wrap',
                '.exam-panel',
                '.test-panel',
                '.bplayer-question-wrap',
                '[class*="question"]',
                '[class*="exam"]',
                '[class*="test"]'
            ];
    
            questionSelectors.forEach(sel => {
                const questions = document.querySelectorAll(sel);
                questions.forEach(q => {
                    if (q.offsetParent !== null && isVisible(q)) {
                        processQuestion(q);
                    }
                });
            });
        }
    
        function processQuestion(questionEl) {
            const questionText = questionEl.textContent || '';
            if (questionText.length < 10) return;
    
            const inputs = questionEl.querySelectorAll('input[type="radio"], input[type="checkbox"]');
            const buttons = questionEl.querySelectorAll('button, .option-btn, .choice-item, .answer-item');
    
            if (inputs.length > 0) {
                const correctInput = getMedicalAnswer(questionText, inputs);
                if (correctInput && !correctInput.disabled) {
                    setTimeout(() => {
                        correctInput.click();
                        log('已自动选择答案');
                    }, 1500);
                }
            } else if (buttons.length > 0) {
                const correctBtn = getMedicalButton(questionText, buttons);
                if (correctBtn && !correctBtn.disabled) {
                    setTimeout(() => {
                        correctBtn.click();
                        log('已自动点击答案');
                    }, 1500);
                }
            }
        }
    
        function getMedicalAnswer(question, inputs) {
            const medicalAnswers = {
                '高血压': 0,
                '糖尿病': 1,
                '冠心病': 0,
                '脑血管': 1,
                '药物': 0,
                '剂量': 1,
                '禁忌': 0,
                '不良反应': 1,
                '诊断': 0,
                '治疗': 1,
                '预防': 0,
                '康复': 1,
                '急诊': 0,
                '急救': 1,
                '心肺': 0,
                '复苏': 1,
                '抗菌药': 0,
                '抗生素': 1,
                '合理用药': 0,
                '处方': 1
            };
    
            for (const [keyword, idx] of Object.entries(medicalAnswers)) {
                if (question.includes(keyword)) {
                    return inputs[idx % inputs.length];
                }
            }
    
            return inputs[Math.floor(Math.random() * inputs.length)];
        }
    
        function getMedicalButton(question, buttons) {
            const medicalButtons = {
                '高血压': 0,
                '糖尿病': 1,
                '冠心病': 0,
                '药物': 0,
                '剂量': 1,
                '禁忌': 0,
                '治疗': 0,
                '预防': 1
            };
    
            for (const [keyword, idx] of Object.entries(medicalButtons)) {
                if (question.includes(keyword)) {
                    return buttons[idx % buttons.length];
                }
            }
    
            return buttons[Math.floor(Math.random() * buttons.length)];
        }
    
        function findNextButton() {
            const nextSelectors = [
                '.hy-next-btn',
                '.next-btn',
                '.btn-next',
                'button.next',
                '.course-next-btn',
                'a.next',
                '[class*="next"]',
                '[class*="continue"]',
                'button:contains("下一节")',
                'a:contains("下一节")'
            ];
    
            for (const sel of nextSelectors) {
                const btn = document.querySelector(sel);
                if (btn && btn.offsetParent !== null && !btn.disabled) {
                    const btnText = btn.textContent || '';
                    if (btnText.includes('下一') || btnText.includes('继续')) {
                        return btn;
                    }
                }
            }
            return null;
        }
    
        function clickNextIfComplete(video) {
            const progress = getVideoProgress(video);
            if (progress >= 92) {
                const nextBtn = findNextButton();
                if (nextBtn) {
                    log('视频播放完成,准备跳转下一节');
                    setTimeout(() => {
                        nextBtn.click();
                        state.completedCount++;
                        log(`已完成 ${state.completedCount} 节课程`);
                    }, 2000);
                }
            }
        }
    
        function syncProgress() {
            const video = findVideoElement();
            if (video) {
                const progress = getVideoProgress(video);
                const duration = getVideoDuration(video);
                const currentTime = video.currentTime.toFixed(1);
                const totalDuration = duration.toFixed(1);
                log(`进度: ${progress.toFixed(1)}% (${currentTime}/${totalDuration}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) {
                    const progress = getVideoProgress(video);
                    if (progress < 15) {
                        seekVideo(video, CONFIG.seekStep);
                    }
                }
            }, 4000);
    
            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;
            localStorage.setItem('nyjjpx_muted', state.isMuted.toString());
            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 toggleAutoAnswer() {
            state.enableAutoAnswer = !state.enableAutoAnswer;
            log(`自动答题: ${state.enableAutoAnswer ? '开启' : '关闭'}`);
        }
    
        function createControlPanel() {
            const existing = document.getElementById('nyjjpx-control-panel');
            if (existing) return;
    
            const panel = document.createElement('div');
            panel.id = 'nyjjpx-control-panel';
            panel.innerHTML = `
                <div style="position:fixed;top:10px;right:10px;z-index:999999;
                            background:linear-gradient(135deg,#c31432 0%,#240b36 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="nyjjpx-speed-display">${state.currentSpeed}</span>x</div>
                    <div style="margin-bottom:8px;">状态: <span id="nyjjpx-status">${state.isRunning ? '运行中' : '已停止'}</span></div>
                    <div style="margin-bottom:8px;">已完成: <span id="nyjjpx-completed">${state.completedCount}</span> 节</div>
                    <div style="margin-bottom:10px;">已看: <span id="nyjjpx-watchtime">${state.totalWatchTime}</span> 秒</div>
                    <button onclick="window.__nyjjpx_setSpeed(1.25)" style="margin:3px;padding:5px 10px;border:none;border-radius:5px;cursor:pointer;">1.25x</button>
                    <button onclick="window.__nyjjpx_setSpeed(1.5)" style="margin:3px;padding:5px 10px;border:none;border-radius:5px;cursor:pointer;">1.5x</button>
                    <button onclick="window.__nyjjpx_setSpeed(2)" style="margin:3px;padding:5px 10px;border:none;border-radius:5px;cursor:pointer;">2x</button>
                    <button onclick="window.__nyjjpx_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.__nyjjpx_setSpeed = (speed) => setSpeed(speed);
            window.__nyjjpx_toggle = () => {
                if (state.isRunning) {
                    stopAutomation();
                } else {
                    startAutomation();
                }
                document.getElementById('nyjjpx-status').textContent = state.isRunning ? '运行中' : '已停止';
                const btn = document.querySelector('#nyjjpx-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();
            }, 2000);
        }
    
        main();
    })();
    
    #宁阳县#继续医学教育#华医网
    全国体育传统特色学校体育师资培训平台刷课脚本分享
    陕西干部网络学院刷课脚本分享

    ← 全国体育传统特色学校体育师资培训平台刷课脚本分享 陕西干部网络学院刷课脚本分享→

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