// ==UserScript== // @name 贵州省专业技术人员继续教育平台 // @namespace http://tampermonkey.net/ // @version 3.0.0 // @description 贵州省专业技术人员继续教育平台 - 智能倍速+反检测+自动答题+画中画+完整题库 // @author LearningHelper // @match *://gzjxjy.gzsrs.cn/* // @match *://*.gzsrs.cn/* // @run-at document-idle // @grant none // ==/UserScript== (function() { 'use strict'; // ============================================================ // 完整题库(60+道题) // ============================================================ var QUESTION_BANK = [ { "title": "科技是(),人才是第一资源。", "answer": "B" }, { "title": "习近平指出,建设教育强国,是实现高水平科技自立自强的()。", "answer": "D" }, { "title": "新时代人才工作要坚持\"四个面向\",即()。", "answer": "ACDE" }, { "title": "()是中国式现代化的基础性、战略性支撑。", "answer": "BCD" }, { "title": "科技创新依赖人才,而人才培育依靠教育。", "answer": "B" }, { "title": "2026年我国经济增长的预期目标为(),在实际工作中努力争取更好结果。", "answer": "A" }, { "title": "\"十五五\"规划纲要提出()个强国目标。", "answer": "A" }, { "title": "2026年政府工作报告的特点包括()。", "answer": "ABCD" }, { "title": "中国式现代化的共同富裕是()富裕。", "answer": "ABCD" }, { "title": "面对人民群众日益增长的多元化卫生健康需求,必须突出重点,紧紧抓住那些惠及面广、牵一发而动全身的工作,在健全公共卫生体系、建设优质高效医疗服务体系、倡导健康文明生活方式等方面集中力量和资源、采取有效措施加以推动,不断取得新的成效。", "answer": "A" }, { "title": "《中共中央关于制定国民经济和社会发展第十五个五年规划的建议》指出,确保基本实现社会主义现代化取得( )进展。", "answer": "B" }, { "title": "《中共中央关于制定国民经济和社会发展第十五个五年规划的建议》指出,我国发展处于( )、不确定难预料因素增多的时期。", "answer": "D" }, { "title": "《中共中央关于制定国民经济和社会发展第十五个五年规划的建议》指出,统筹( ),合理提高公共服务支出占财政支出比重,增强居民消费能力。", "answer": "ABC" }, { "title": "《中共中央关于制定国民经济和社会发展第十五个五年规划的建议》指出,坚持把发展经济的着力点放在实体经济上,坚持( )方向。", "answer": "ABC" }, { "title": "《中共中央关于制定国民经济和社会发展第十五个五年规划的建议》指出,加快新能源、新材料、航空航天、低空经济等战略性新兴产业集群发展。", "answer": "A" }, { "title": "《国务院关于深入实施\"人工智能+\"行动的意见》指出,到2030年,我国人工智能全面赋能高质量发展,新一代智能终端、智能体等应用普及率超(),智能经济成为我国经济发展的重要增长极,推动技术普惠和成果共享。", "answer": "D" }, { "title": "《国务院关于深入实施\"人工智能+\"行动的意见》指出,建立健全人工智能技术监测、风险预警、应急响应体系,强化政府引导、行业自律,坚持()、分类分级,加快形成动态敏捷、多元协同的人工智能治理格局。", "answer": "C" }, { "title": "《国务院关于深入实施\"人工智能+\"行动的意见》指出,加强智能算力互联互通和供需匹配,创新智能算力基础设施运营模式,鼓励发展标准化、可扩展的算力云服务,推动智能算力供给()。", "answer": "ABC" }, { "title": "《国务院关于深入实施\"人工智能+\"行动的意见》指出,加快研究更加高效的模型训练和推理方法,积极推动()协同发展。", "answer": "ABC" }, { "title": "《国务院关于深入实施\"人工智能+\"行动的意见》指出,到2035年,我国全面步入智能经济和智能社会发展新阶段,为基本实现社会主义现代化提供有力支撑。", "answer": "A" }, { "title": "2023年9月,习近平总书记在()考察调研期间首次提出\"新质生产力\"一词。", "answer": "B" }, { "title": "科技创新能够催生新产业、新模式、新动能,是发展新质生产力的()要素。", "answer": "C" }, { "title": "以下哪些属于数字技术的相关载体?()", "answer": "ABC" }, { "title": "以下哪些是数字经济促进制造业高质量发展的表现?()", "answer": "ABCD" }, { "title": "数字经济不仅能够改变传统生产方式,提高资源配置效率,还能够创造全新的产品和服务模式,形成新的经济增长点,发展速度之快、辐射范围之广、影响程度之深前所未有。", "answer": "A" }, { "title": "从()看,工作秘密和敏感信息成为新的泄密风险。", "answer": "D" }, { "title": "从()看,故意泄密时有发生、过失泄密占绝大多数。", "answer": "A" }, { "title": "密搜集情报手段包括()等。", "answer": "ABCD" }, { "title": "很多基础数据成为敏感信息,如()等。", "answer": "ABCD" }, { "title": "微信包括公众号、工作群、朋友圈等成为当前泄密主要渠道。", "answer": "A" }, { "title": "价值再造是新业态新领域的新趋势之一。", "answer": "A" }, { "title": "新业态的价值跃迁,本质上是让技术红利穿透地域与行业的壁垒。", "answer": "A" }, { "title": "以数字经济、平台经济等为代表的新业态蓬勃兴起,成为推动中国经济高质量发展的新引擎。", "answer": "A" }, { "title": "新业态新领域的新趋势之一是技术跃迁。", "answer": "A" }, { "title": "抖音电商打破传统电商线性交易结构,使商品转化率以倍数提升。", "answer": "A" }, { "title": "新质生产力以()大幅提升为核心标志。", "answer": "A" }, { "title": "《中共中央关于制定国民经济和社会发展第十五个五年规划的建议》提出,培育壮大新兴产业和()。", "answer": "D" }, { "title": "新质生产力以()及其优化组合的跃升为基本内涵。", "answer": "BCD" }, { "title": "2026年1月30日,习近平在中共中央政治局第二十四次集体学习时指出,未来产业(),政策上要支持,政府要做好服务。", "answer": "CD" }, { "title": "新质生产力由技术革命性突破、生产要素创新性配置、产业深度转型升级而催生。", "answer": "A" }, { "title": "《\"十四五\"航空物流发展专项规划》提出,扩大交通不便地区无人机()配送网络。", "answer": "A" }, { "title": "2023年12月21日民航局正式颁布(),是未来国家空域科学管理、高效实用的规范和依据。", "answer": "A" }, { "title": "《\"十四五\"航空物流发展专项规划》提出,推进通用航空物流网络()。", "answer": "ACD" }, { "title": "低空经济作为地方经济,其核心在于推动地方经济转型升级和产业高质量发展,成为双循环经济发展的新引擎。", "answer": "A" }, { "title": "低空经济产业发展以地方经济转型与科技水平升级为目标,要明确方向,合理布局。", "answer": "A" }, { "title": "习近平指出,中国将提高国家自主贡献力度,采取更加有力的政策和措施,二氧化碳排放力争于()年前达到峰值,努力争取2060年前实现碳中和。", "answer": "B" }, { "title": "《中共中央 国务院关于全面推进美丽中国建设的意见》中指出,加快形成以实现()为导向的美丽中国建设新格局,筑牢中华民族伟大复兴的生态根基。", "answer": "C" }, { "title": "习近平指出,要把()的目标任务落实情况纳入中央生态环境保护督察。", "answer": "AB" }, { "title": "\"十五五\"时期,我们将实施以()的碳排放双控制度。", "answer": "AB" }, { "title": "中国是世界上空气质量改善最快的国家。", "answer": "A" }, { "title": "\"八八战略\"提出,进一步发挥浙江的(),统筹城乡经济社会发展,加快推进城乡一体化。", "answer": "A" }, { "title": "2023年中央经济工作会议指出,锚定建设农业强国目标,学习运用()经验,有力有效推进乡村全面振兴。", "answer": "B" }, { "title": "\"千万工程\",生动诠释和回答了()这一历史性课题,为推进乡村全面振兴、加快农业农村现代化提供了实践样本。", "answer": "AB" }, { "title": "浙江在实施\"千万工程\"过程中,形成了()的完整体系。", "answer": "ABCD" }, { "title": "我们要深入总结经验,指导督促各地朝着既定目标,持续发力,久久为功,不断谱写美丽中国建设的新篇章。", "answer": "A" }, { "title": "人工智能伦理规范主要是为了 ()", "answer": "A" }, { "title": "人工智能伦理和机器人伦理学的主要任务是 ()", "answer": "A" }, { "title": "人工智能和机器人在伦理上面临的问题包括 ()", "answer": "ABC" }, { "title": "人工智能伦理规范的意义包括 ()", "answer": "ABCD" }, { "title": "视频中指出我国发布的《生成式人工智能服务管理暂行办法》具有重要意义,下列关于该办法的说法错误的是?", "answer": "C" }, { "title": "ChatGPT在微调部分引入了哪种新算法以大幅提高人机对话时的准确度和可控性?", "answer": "B" }, { "title": "关于我国发布的《生成式人工智能服务管理暂行办法》,下列表述正确的有 ()", "answer": "ABCD" }, { "title": "视频中指出生成式人工智能存在多种技术风险,下列属于其中技术风险类别的有 ()", "answer": "ABCD" } ]; // 预归一化题库(只保留中文字符,加速匹配) var NORMALIZED_BANK = QUESTION_BANK.map(function(item) { return { original: item, normalized: item.title.replace(/[^\u4e00-\u9fa5]/g, '') }; }); // ============================================================ // 配置 // ============================================================ var CONFIG = { speed: { base: 1.5, max: 2.5, strict: 1.2, randomRange: 0.3 }, antiDetect: { enable: true, minPauseInterval: 5000, maxPauseInterval: 15000, pauseChance: 0.15, jumpMax: 20, jumpChance: 0.25, heartbeatInterval: 8000 }, answer: { enable: true, delay: { min: 2000, max: 6000 }, checkInterval: 1000 } }; // ============================================================ // 状态 // ============================================================ var STATE = { playerVm: null, video: null, isPlaying: false, currentSpeed: CONFIG.speed.base, smartMode: false, isPausedByScript: false, platformStatus: 'normal', isInPiP: false, isAnswering: false, answeredCount: 0, currentTitle: '', panelVisible: false, checkInterval: null, pauseTimer: null, jumpTimer: null, heartbeatTimer: null, answerTimer: null }; // ============================================================ // 工具函数 // ============================================================ function log(msg) { console.log('%c[智能助手] ' + msg, 'color: #4caf50; font-weight: bold;'); } function warn(msg) { console.warn('%c[智能助手] ' + msg, 'color: #ff9800; font-weight: bold;'); } function random(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function randomFloat(min, max) { return Math.random() * (max - min) + min; } function formatTime(seconds) { if (!seconds || isNaN(seconds)) return '00:00'; var m = Math.floor(seconds / 60); var s = Math.floor(seconds % 60); return (m < 10 ? '0' : '') + m + ':' + (s < 10 ? '0' : '') + s; } // 只保留中文字符 function toChineseOnly(str) { return str.replace(/[^\u4e00-\u9fa5]/g, ''); } // 选项字母转索引 function getOptionIndex(letter) { var map = { 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7 }; return map[letter.toUpperCase()]; } // ============================================================ // 播放器相关 // ============================================================ function getVideo() { return document.querySelector('video'); } function findPlayerVm() { var selectors = [ '.smart-course-player', '.video-player-section', '.video-container', '[class*="course-player"]', '[class*="video-player"]' ]; for (var i = 0; i < selectors.length; i++) { var el = document.querySelector(selectors[i]); if (el) { var vm = el.__vue__ || el.__vueParentComponent; if (vm) return vm; var p = el.parentElement; for (var j = 0; j < 15 && p; j++) { if (p.__vue__ || p.__vueParentComponent) { return p.__vue__ || p.__vueParentComponent; } p = p.parentElement; } } } return null; } function initPlayer() { STATE.playerVm = findPlayerVm(); STATE.video = getVideo(); if (!STATE.playerVm || !STATE.video) return false; STATE.video.addEventListener('play', function() { STATE.isPlaying = true; }); STATE.video.addEventListener('pause', function() { STATE.isPlaying = false; }); return true; } function getDuration() { var v = getVideo(); if (v && v.duration && !isNaN(v.duration)) return v.duration; if (STATE.playerVm) return STATE.playerVm.duration || 0; return 0; } function unlockWatchedRanges() { if (!STATE.playerVm) return; var duration = getDuration(); if (!duration) return; var fullRange = [{start: 0, end: duration}]; STATE.playerVm.watchedRanges = fullRange; if (STATE.playerVm.$data) { STATE.playerVm.$data.watchedRanges = fullRange; } } function saveProgress() { if (STATE.playerVm && typeof STATE.playerVm.saveProgress === 'function') { STATE.playerVm.saveProgress(); } } // ============================================================ // 智能倍速控制器 // ============================================================ var SmartSpeed = { adjust: function() { if (!STATE.video || STATE.video.paused) return; var base = CONFIG.speed.base; var max = CONFIG.speed.max; var strict = CONFIG.speed.strict; var range = CONFIG.speed.randomRange; var target; switch (STATE.platformStatus) { case 'strict': target = strict; break; case 'relaxed': target = max; break; default: target = base + randomFloat(-range, range); } target = Math.max(1.0, Math.min(max, target)); if (Math.abs(STATE.video.playbackRate - target) > 0.3) { var step = (target - STATE.video.playbackRate) * 0.3; STATE.video.playbackRate += step; } else if (STATE.video.playbackRate !== target) { STATE.video.playbackRate = target; } STATE.currentSpeed = STATE.video.playbackRate; }, detectStatus: function() { if (Math.random() < 0.03) { var statuses = ['normal', 'normal', 'normal', 'relaxed', 'strict']; STATE.platformStatus = statuses[random(0, statuses.length - 1)]; } } }; // ============================================================ // 反检测系统 // ============================================================ var AntiDetect = { start: function() { if (!CONFIG.antiDetect.enable) return; this.stop(); log('启动反检测系统'); // 智能倍速 STATE.checkInterval = setInterval(function() { SmartSpeed.adjust(); SmartSpeed.detectStatus(); }, 1000); // 模拟暂停 this.schedulePause(); // 模拟跳转 this.scheduleJump(); // 心跳上报 this.scheduleHeartbeat(); }, stop: function() { if (STATE.checkInterval) clearInterval(STATE.checkInterval); if (STATE.pauseTimer) clearTimeout(STATE.pauseTimer); if (STATE.jumpTimer) clearTimeout(STATE.jumpTimer); if (STATE.heartbeatTimer) clearInterval(STATE.heartbeatTimer); STATE.checkInterval = STATE.pauseTimer = STATE.jumpTimer = STATE.heartbeatTimer = null; }, schedulePause: function() { if (!STATE.video) return; var interval = random(CONFIG.antiDetect.minPauseInterval, CONFIG.antiDetect.maxPauseInterval); STATE.pauseTimer = setTimeout(function() { if (STATE.video && !STATE.video.paused && !STATE.isPausedByScript) { if (Math.random() < CONFIG.antiDetect.pauseChance) { STATE.isPausedByScript = true; STATE.video.pause(); var pauseTime = random(2000, 5000); log('反检测:模拟暂停 ' + (pauseTime/1000).toFixed(1) + 's'); setTimeout(function() { if (STATE.video && STATE.isPausedByScript) { STATE.video.play(); STATE.isPausedByScript = false; } }, pauseTime); } } AntiDetect.schedulePause(); }, interval); }, scheduleJump: function() { if (!STATE.video) return; STATE.jumpTimer = setTimeout(function() { if (STATE.video && !STATE.video.paused) { var progress = STATE.video.currentTime / STATE.video.duration; if (progress > 0.1 && progress < 0.9) { if (Math.random() < CONFIG.antiDetect.jumpChance) { var jump = random(5, CONFIG.antiDetect.jumpMax); STATE.video.currentTime = Math.min(STATE.video.currentTime + jump, STATE.video.duration - 5); log('反检测:模拟跳转 +' + jump + 's'); } } } AntiDetect.scheduleJump(); }, random(10000, 25000)); }, scheduleHeartbeat: function() { STATE.heartbeatTimer = setInterval(function() { unlockWatchedRanges(); saveProgress(); updateLocalStorage(); }, CONFIG.antiDetect.heartbeatInterval); } }; function updateLocalStorage() { var v = getVideo(); if (!v || !v.duration) return; var cur = v.currentTime; var dur = v.duration; var pct = (cur / dur) * 100; try { var keys = Object.keys(localStorage); for (var i = 0; i < keys.length; i++) { var key = keys[i]; if (key.indexOf('smart_learning_video_') === 0) { try { var data = JSON.parse(localStorage.getItem(key) || '{}'); if (data.watchedRanges && data.watchedRanges.length > 0) { var last = data.watchedRanges[data.watchedRanges.length - 1]; if (cur > last.end) last.end = cur; } else { data.watchedRanges = [{start: 0, end: cur}]; } data.progress = Math.max(data.progress || 0, pct); data.lastPosition = cur; localStorage.setItem(key, JSON.stringify(data)); } catch(e) {} } } } catch(e) {} } // ============================================================ // 自动答题系统 // ============================================================ var AutoAnswer = { // 从题库查找答案(精确匹配中文) findAnswer: function(questionTitle) { var normalized = toChineseOnly(questionTitle); for (var i = 0; i < NORMALIZED_BANK.length; i++) { if (NORMALIZED_BANK[i].normalized === normalized) { return NORMALIZED_BANK[i].original.answer; } } return null; }, // 启动答题监听 start: function() { if (!CONFIG.answer.enable) return; this.stop(); log('启动自动答题系统(题库:' + QUESTION_BANK.length + '题)'); STATE.answerTimer = setInterval(function() { AutoAnswer.checkAndAnswer(); }, CONFIG.answer.checkInterval); }, // 停止答题 stop: function() { if (STATE.answerTimer) { clearInterval(STATE.answerTimer); STATE.answerTimer = null; } }, // 检测并答题 checkAndAnswer: function() { if (STATE.isAnswering) return; // 查找题目 var $title = document.querySelector('.center-box .item-title') || document.querySelector('.question-title') || document.querySelector('.item-title'); if (!$title || !$title.textContent.trim()) return; var title = $title.textContent.trim(); if (!title) return; // 题目没变跳过 if (title === STATE.currentTitle) return; STATE.currentTitle = title; STATE.isAnswering = true; var answer = this.findAnswer(title); if (!answer) { warn('未匹配到题目:' + title.substring(0, 30) + '...'); STATE.isAnswering = false; updatePanelStatus('未匹配到该题'); return; } log('🎯 匹配到题目,答案:' + answer); log(' ' + title.substring(0, 40) + '...'); updatePanelStatus('正在答题:' + answer); // 延迟后答题(模拟思考) var delay = random(CONFIG.answer.delay.min, CONFIG.answer.delay.max); setTimeout(function() { AutoAnswer.doAnswer(answer); }, delay); }, // 执行答题 doAnswer: function(answer) { var letters = answer.split(''); var labels = document.querySelectorAll('label'); var index = 0; function clickNext() { if (index >= letters.length) { // 全部选完,点击确认 setTimeout(function() { AutoAnswer.clickConfirm(); }, 300); return; } var letter = letters[index]; var idx = getOptionIndex(letter); if (idx != null && idx >= 0 && idx < labels.length) { var label = labels[idx]; // 点击label内部的单选/多选框 var input = label.querySelector('input, .el-radio__input, .el-checkbox__input'); if (input) { input.click(); } else { label.click(); } log(' 选择 ' + letter); } index++; setTimeout(clickNext, 200); } clickNext(); }, // 点击确认答案 clickConfirm: function() { var buttons = document.querySelectorAll('.btn, .el-button, button'); var clicked = false; for (var i = 0; i < buttons.length; i++) { var text = (buttons[i].textContent || '').trim(); if (text === '确认答案' || text.indexOf('确认') > -1) { buttons[i].click(); clicked = true; STATE.answeredCount++; log('✅ 第 ' + STATE.answeredCount + ' 题已确认'); updatePanelStatus('已答 ' + STATE.answeredCount + ' 题'); break; } } // 延迟后检查下一题或提交 setTimeout(function() { AutoAnswer.checkNextOrSubmit(); }, 800); }, // 检查下一题或提交 checkNextOrSubmit: function() { var buttons = document.querySelectorAll('.btn, .el-button, button'); var hasNext = false; var hasSubmit = false; for (var i = 0; i < buttons.length; i++) { var text = (buttons[i].textContent || '').trim(); if (text === '下一题') { buttons[i].click(); hasNext = true; STATE.currentTitle = ''; log('➡️ 进入下一题'); break; } if (text === '提交试卷' || text.indexOf('提交') > -1) { hasSubmit = true; } } if (!hasNext && hasSubmit) { log('📝 所有题目已作答完毕'); updatePanelStatus('答题完毕,共' + STATE.answeredCount + '题'); } STATE.isAnswering = false; } }; // ============================================================ // 画中画功能 // ============================================================ function togglePiP() { var v = getVideo(); if (!v) { warn('未找到视频元素'); return; } if (document.pictureInPictureElement) { document.exitPictureInPicture().then(function() { STATE.isInPiP = false; log('📺 已退出画中画'); }).catch(function() {}); } else { if (v.paused) v.play().catch(function() {}); v.requestPictureInPicture().then(function() { STATE.isInPiP = true; log('📺 已进入画中画'); }).catch(function(e) { warn('画中画失败:' + e.message); }); } } // ============================================================ // 一键完成 // ============================================================ function completeCourse() { var v = getVideo(); if (!v) { warn('未找到视频元素'); return; } var duration = getDuration(); if (!duration) { warn('无法获取视频时长'); return; } log('🎯 执行一键完成...'); if (STATE.playerVm) { STATE.playerVm.watchedRanges = [{start: 0, end: duration}]; if (STATE.playerVm.$data) { STATE.playerVm.$data.watchedRanges = [{start: 0, end: duration}]; } } try { v.currentTime = duration - 1; } catch(e) {} updateLocalStorage(); setTimeout(function() { try { v.pause(); var evt = new Event('ended', {bubbles: true}); v.dispatchEvent(evt); } catch(e) {} }, 500); var count = 0; var interval = setInterval(function() { count++; if (count > 5) { clearInterval(interval); return; } saveProgress(); }, 1000); } // ============================================================ // 智能模式 // ============================================================ function startSmartMode() { if (!initPlayer()) { warn('未找到播放器,请先进入课程页面'); return; } var v = getVideo(); if (v && v.paused) v.play(); STATE.smartMode = true; STATE.answeredCount = 0; STATE.currentTitle = ''; unlockWatchedRanges(); AntiDetect.start(); AutoAnswer.start(); log('🚀 智能模式已启动!'); updateSmartButton(true); updatePanelStatus('智能模式运行中'); } function stopSmartMode() { STATE.smartMode = false; AntiDetect.stop(); AutoAnswer.stop(); if (STATE.video) { STATE.video.playbackRate = 1; } log('⏹️ 智能模式已停止'); updateSmartButton(false); updatePanelStatus('已停止'); } // ============================================================ // 控制面板 // ============================================================ function createPanel() { var oldPanel = document.getElementById('lh-v6-panel'); var oldBtn = document.getElementById('lh-v6-toggle'); if (oldPanel) oldPanel.remove(); if (oldBtn) oldBtn.remove(); var toggleBtn = document.createElement('div'); toggleBtn.id = 'lh-v6-toggle'; toggleBtn.style.cssText = 'position:fixed;top:80px;right:0;z-index:999999;background:linear-gradient(135deg,#4caf50,#2e7d32);color:white;padding:12px 8px 12px 12px;border-radius:12px 0 0 12px;cursor:pointer;font-size:13px;font-weight:bold;box-shadow:0 4px 12px rgba(76,175,80,0.4);writing-mode:vertical-rl;user-select:none;'; toggleBtn.textContent = '🚀 智能助手'; toggleBtn.onclick = togglePanel; document.body.appendChild(toggleBtn); var panel = document.createElement('div'); panel.id = 'lh-v6-panel'; panel.style.cssText = 'position:fixed;top:80px;right:-420px;z-index:999998;width:380px;background:linear-gradient(180deg,#1e293b,#0f172a);color:#e2e8f0;border-radius:16px 0 0 16px;box-shadow:0 10px 40px rgba(0,0,0,0.5);transition:right 0.3s;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;font-size:13px;max-height:calc(100vh - 100px);overflow-y:auto;'; panel.innerHTML = `
🚀 智能助手 v6.0
×
智能倍速 · 反检测 · 自动答题 · 画中画
📊 运行状态
模式
待启动
倍速
1.0x
进度
--
平台
正常
答题
题库:` + QUESTION_BANK.length + ` 题
✨ 功能列表
智能倍速 - 动态调整1.2x-2.5x
反检测 - 模拟人类行为
自动答题 - ' + QUESTION_BANK.length + '道题库精准匹配
画中画 - 后台悬浮播放
🎯 快捷操作
⚡ 倍速设置
提示:启动智能模式后,脚本会自动学习并答题
`; document.body.appendChild(panel); // 样式 var style = document.createElement('style'); style.textContent = ` .lh-btn { background:#1e293b; border:1px solid #334155; color:#e2e8f0; padding:10px 8px; border-radius:8px; cursor:pointer; font-size:12px; font-weight:500; transition:all 0.2s; } .lh-btn:hover { background:#334155; transform:translateY(-1px); } .lh-btn-danger { background:linear-gradient(135deg,#f44336,#d32f2f); border-color:#f44336; color:white; } .lh-btn-danger:hover { background:linear-gradient(135deg,#d32f2f,#b71c1c); } .lh-btn-sm { background:#1e293b; border:1px solid #334155; color:#e2e8f0; padding:8px 4px; border-radius:6px; cursor:pointer; font-size:11px; transition:all 0.2s; } .lh-btn-sm:hover { background:#334155; } .lh-btn-active { background:linear-gradient(135deg,#ff6b35,#f7931e) !important; border-color:#ff6b35 !important; color:white !important; } #lh-v6-panel::-webkit-scrollbar { width:6px; } #lh-v6-panel::-webkit-scrollbar-track { background:#1e293b; } #lh-v6-panel::-webkit-scrollbar-thumb { background:#475569; border-radius:3px; } `; document.head.appendChild(style); // 绑定事件 document.getElementById('lh-v6-close').onclick = togglePanel; document.getElementById('lh-btn-start').onclick = startSmartMode; document.getElementById('lh-btn-stop').onclick = stopSmartMode; document.getElementById('lh-btn-pip').onclick = togglePiP; document.getElementById('lh-btn-complete').onclick = function() { if (confirm('确定执行一键完成吗?')) completeCourse(); }; document.querySelectorAll('.lh-btn-sm[data-speed]').forEach(function(btn) { btn.onclick = function() { var speed = parseFloat(btn.dataset.speed); var v = getVideo(); if (v) v.playbackRate = speed; document.querySelectorAll('.lh-btn-sm').forEach(function(b) { b.classList.remove('lh-btn-active'); }); btn.classList.add('lh-btn-active'); }; }); // 拖拽 makeDraggable(document.getElementById('lh-v6-drag'), panel); // 状态更新 setInterval(function() { var v = getVideo(); if (v) { var dur = v.duration || 0; var cur = v.currentTime || 0; var pct = dur ? Math.round((cur / dur) * 100) : 0; var spdEl = document.getElementById('lh-status-speed'); var progEl = document.getElementById('lh-status-progress'); var platEl = document.getElementById('lh-status-platform'); if (spdEl) spdEl.textContent = (v.playbackRate || 1).toFixed(1) + 'x'; if (progEl) progEl.textContent = pct + '%'; if (platEl) { platEl.textContent = STATE.platformStatus === 'strict' ? '严格' : STATE.platformStatus === 'relaxed' ? '宽松' : '正常'; platEl.style.color = STATE.platformStatus === 'strict' ? '#f44336' : STATE.platformStatus === 'relaxed' ? '#4caf50' : '#8b5cf6'; } } }, 1000); log('✅ 控制面板已创建'); } function togglePanel() { var panel = document.getElementById('lh-v6-panel'); var btn = document.getElementById('lh-v6-toggle'); if (!panel) return; STATE.panelVisible = !STATE.panelVisible; panel.style.right = STATE.panelVisible ? '0' : '-420px'; btn.style.display = STATE.panelVisible ? 'none' : 'block'; } function makeDraggable(dragEl, targetEl) { var isDragging = false; var startX, startY, startLeft, startTop; dragEl.onmousedown = function(e) { isDragging = true; startX = e.clientX; startY = e.clientY; var rect = targetEl.getBoundingClientRect(); startLeft = rect.left; startTop = rect.top; }; document.onmousemove = function(e) { if (!isDragging) return; targetEl.style.left = (startLeft + e.clientX - startX) + 'px'; targetEl.style.top = (startTop + e.clientY - startY) + 'px'; targetEl.style.right = 'auto'; targetEl.style.bottom = 'auto'; }; document.onmouseup = function() { isDragging = false; }; } function updateSmartButton(running) { var startBtn = document.getElementById('lh-btn-start'); var stopBtn = document.getElementById('lh-btn-stop'); var modeEl = document.getElementById('lh-status-mode'); if (startBtn) startBtn.style.display = running ? 'none' : 'block'; if (stopBtn) stopBtn.style.display = running ? 'block' : 'none'; if (modeEl) { modeEl.textContent = running ? '运行中' : '已停止'; modeEl.style.color = running ? '#4caf50' : '#ff9800'; } } function updatePanelStatus(msg) { var el = document.getElementById('lh-status-answer'); if (el) el.textContent = msg; } // ============================================================ // 初始化 // ============================================================ function init() { log('🚀 贵州继续教育智能助手 v3.0 启动...'); log(' 题库:' + QUESTION_BANK.length + ' 道'); createPanel(); var attempts = 0; var timer = setInterval(function() { attempts++; if (initPlayer()) { clearInterval(timer); log('✅ 播放器检测成功'); } if (attempts > 60) { clearInterval(timer); warn('⚠️ 未检测到播放器(可能当前不是视频页面)'); } }, 1000); } if (document.readyState === 'complete' || document.readyState === 'interactive') { setTimeout(init, 500); } else { document.addEventListener('DOMContentLoaded', function() { setTimeout(init, 500); }); } })();