// ==UserScript== // @name 河北教师继续教育2024 // @namespace http://tampermonkey.net/ // @version 2.0.5.03 // @description 合并了七个油猴脚本,确保它们之间的运行互不影响、变量不冲突。 // @author 金子 // @match *://*.stu.teacher.com.cn/* // @icon https://www.google.com/s2/favicons?sz=64&domain=bing.com // @grant none // @license MIT // @require https://code.jquery.com/jquery-3.6.0.min.js // @downloadURL none // ==/UserScript== /* global $ */ // 告诉 ESLint,$ 是全局变量 (function () { 'use strict'; // 通用工具函数 const utils = { // 延迟执行函数 delay: (ms) => new Promise(resolve => setTimeout(resolve, ms)), // 随机延迟 randomDelay: (min, max) => Math.floor(Math.random() * (max - min)) + min, // 检查元素是否存在 elementExists: (selector) => document.querySelector(selector) !== null, // 点击元素 clickElement: (selector) => { const element = document.querySelector(selector); if (element) element.click(); }, // 检查页面内容 checkPageContent: (content) => document.body.innerText.includes(content), }; // 第一个脚本:验证信息提交、自动点击按钮等 (function () { const checkAndSubmit = () => { if ($("div:contains('验证信息')").length > 1) { console.log("检测到学习验证"); $("#code").attr("value", $("#codespan").text()); $("a:contains('提交')")[0].click(); } }; const checkAndClickOk = () => { const okButton = document.querySelector('a:contains("Ok,我知道了!")'); if (okButton) { okButton.click(); document.querySelector(".ccH5TogglePlay").click(); console.log("rePlay success!!!"); } }; const checkCoursePage = () => { const href = location.href; if (href.includes("/course/showCourse/")) { const enterCourseButton = document.querySelector(".button-hui"); if (enterCourseButton && enterCourseButton.innerText === "进入课程学习") { enterCourseButton.click(); } } else if (href.includes("/course/learn/")) { if (window.TimeNum >= 1200) { alert("可以提交了"); } } }; const checkAndClickExpand = () => { const expandButton = document.querySelector('span.step:contains("展开")'); if (expandButton) { expandButton.click(); console.log('已点击“展开”按钮'); } }; setInterval(() => { checkAndSubmit(); checkAndClickOk(); checkCoursePage(); checkAndClickExpand(); }, 6000); })(); // 第二个脚本:点击“学习中”按钮 async function runSecondScript() { const hasTriggered = sessionStorage.getItem('countLearnTriggered'); if (hasTriggered === 'true') { console.log('点击事件已经触发过,本次会话不再重复触发。'); return; } const targetElement = document.querySelector('li i.icon_2'); if (targetElement && targetElement.textContent === '学习中') { const targetButton = targetElement.closest('li').querySelector('a[onclick*="countLearn"]'); if (targetButton) { const delay = utils.randomDelay(5000, 10000); await utils.delay(delay); targetButton.click(); sessionStorage.setItem('countLearnTriggered', 'true'); const courseLink = targetElement.closest('li').querySelector('a.list-title'); if (courseLink && courseLink.href) { window.location.href = courseLink.href; } } } } // 第三个脚本:点击“未学习”按钮 async function runThirdScript() { const hasTriggered = sessionStorage.getItem('countLearnTriggered2'); if (hasTriggered === 'true') { console.log('点击事件已经触发过,本次会话不再重复触发。'); return; } const targetElement = document.querySelector('li i.icon_0'); if (targetElement && targetElement.textContent === '未学习') { const targetButton = targetElement.closest('li').querySelector('a[onclick*="countLearn"]'); if (targetButton) { const delay = utils.randomDelay(5000, 10000); await utils.delay(delay); targetButton.click(); sessionStorage.setItem('countLearnTriggered2', 'true'); const courseLink = targetElement.closest('li').querySelector('a.list-title'); if (courseLink && courseLink.href) { window.location.href = courseLink.href; } } } } // 第四个脚本:自动点击视频项 function runFourthScript() { const autoClickVideoItem = () => { const videoItems = document.querySelectorAll('li[data-type="视频"], li[data-type="1"]'); videoItems.forEach(item => { if (item.onclick || item.getAttribute('onclick')) { item.click(); console.log('已点击视频项:', item); } }); }; setTimeout(() => { autoClickVideoItem(); setInterval(autoClickVideoItem, 1200000); }, 20000); } // 第五个脚本:自动点击replaybtn按钮 function runFifthScript() { const checkAndClickReplayBtn = () => { const replayBtn = document.getElementById('replaybtn'); if (replayBtn) { replayBtn.click(); console.log('已点击replaybtn按钮'); const nextDelay = utils.randomDelay(30000, 60000); setTimeout(checkAndClickReplayBtn, nextDelay); } else { const nextDelay = utils.randomDelay(5000, 10000); setTimeout(checkAndClickReplayBtn, nextDelay); } }; checkAndClickReplayBtn(); } // 第六个脚本:自动刷新学习时间 (function () { const refreshButton = document.querySelector('div.fr button.btn.studyCourseTimeRefresh'); if (refreshButton) { const clickButton = () => { if (!utils.checkPageContent('最长可累计时间:')) { refreshButton.click(); console.log('已触发“刷新学习时间”按钮点击。'); } }; clickButton(); setInterval(clickButton, 600000); } })(); // 第七个脚本:检测学习状态并刷新页面 (function () { let hasClicked = false; let refreshCount = 0; const maxRefreshCount = 1; const checkLearningStatus = () => { const unlearned = document.querySelector('.icon_0'); const learning = document.querySelector('.icon_2'); return !!(unlearned || learning); }; const clickThirdPhaseButton = () => { const thirdPhaseButton = document.querySelector('li[data-value="4032"]'); if (thirdPhaseButton && !hasClicked) { thirdPhaseButton.click(); hasClicked = true; } }; const main = () => { if (utils.checkPageContent('最长可累计时间:')) return; if (checkLearningStatus()) return; if (!hasClicked && refreshCount < maxRefreshCount) { refreshCount++; setTimeout(() => window.location.reload(), 600000); } clickThirdPhaseButton(); }; setInterval(main, 120000); })(); // 控制脚本执行顺序 (async () => { await runSecondScript(); await runThirdScript(); runFourthScript(); runFifthScript(); })(); })();