// ==UserScript== // @name 教师研修ak // @namespace http://tampermonkey.net/ // @version 2024-08-07.1 // @description 教师研修网2025 // @author f_cat // @match https://ipx.yanxiu.com/train2/workspace/* // @match https://ipx.yanxiu.com/grain/course/* // @icon https://srt-read-online.3ren.cn/basebusiness/headimg/20200711/1594463211851X00rZyPRV8-23.png // @grant GM_setValue // @grant GM_getValue // ==/UserScript== /* ==UserConfig== 设置: config: title: 静音挂课 description: 挂课时保持静音 type: checkbox default: true ==/UserConfig== */ (function () { 'use strict'; // Your code here... // 1. 阻止所有 visibilitychange 事件触发 Object.defineProperty(document, 'hidden', { get: () => false, configurable: true }); Object.defineProperty(document, 'visibilityState', { get: () => 'visible', configurable: true }); function wait(ms) { return new Promise((resolve, reject) => { setTimeout(() => { console.log("Done waiting"); resolve(ms) }, ms) }) } function getTraining() { return new Promise((resolve) => { let getT = setInterval(() => { let trainings = document.querySelectorAll('.training-pack.web'); if (trainings.length > 0) { clearInterval(getT); resolve(trainings); } }); }) } function getCourse(training) { return new Promise((resolve) => { let getC = setInterval(() => { let courses = training.querySelectorAll('.course-item'); if (courses.length > 0) { clearInterval(getC); resolve(courses); } }); }) } async function waitForEnd() { while (GM_getValue('studing')) { await wait(3000); } } async function learnCourse(course) { if (course.querySelector('.learn-status') == undefined || course.querySelector('.learn-status > span').innerText != '已观看 100%') { console.log('开始学习'); course.click(); await waitForEnd(); console.log('结束学习'); } else { console.log('已学过'); } } async function gotoTraining(item) { if (item.querySelector('.pack-tool-content').style.display == 'none') { item.querySelector('.pack-info').click(); await wait(300); console.log('展开'); } let courses = await getCourse(item); console.log('共找到 ' + courses.length + '个视频'); for (var i = 0; i < courses.length; i++) { GM_setValue('studing', true) console.log("开始学习"+courses[i].innerText); await learnCourse(courses[i]); } } //phase-item-wrapper web async function getPhases(){ return new Promise((resolve) => { let getT = setInterval(() => { let trainings = document.querySelectorAll('.phase-item-wrapper.web'); if (trainings.length > 0) { clearInterval(getT); resolve(trainings); } }); }) } async function contentsPage() { console.log('课程学习页面'); let Phases = await getPhases(); console.log('共找到 ' + Phases.length + '个模块') for(let j=0;j { let getR = setInterval(() => { let resourses = document.querySelectorAll('.res-item'); if (resourses.length > 0) { clearInterval(getR); resolve(resourses); } }); }) } function setMute() { let mu = setInterval(() => { if (document.querySelector("video") != undefined) { document.querySelector("video").muted = true; } }, 100) } async function readResourse() { Object.defineProperty(document, 'hidden', { get: () => false, configurable: true }); Object.defineProperty(document, 'visibilityState', { get: () => 'visible', configurable: true }); console.log('开始阅读'); if (GM_getValue('设置.config')) { document.querySelector("video").muted = true; } return new Promise((resolve) => { let study = setInterval(function () { if (document.querySelector('.action-timer').querySelector('span').innerText.substr(0, 4) == '您已完成') { clearInterval(study); console.log('结束阅读'); resolve('done'); return; } if (document.querySelector('.vcp-playtoggle').style.backgroundImage != undefined) { if (document.querySelector('.scoring-wrapper').style.display != 'none') { var event = new Event("mousemove"); document.querySelectorAll('.scoring-wrapper .rate-item')[4].dispatchEvent(event); document.querySelectorAll('.scoring-wrapper .rate-item')[4].click(); document.querySelector('.commit .ivu-btn.ivu-btn-primary').click(); console.log('完成评分,继续播放'); return; } if (document.querySelector('.ended-mask').style.display != 'none') { clearInterval(study); console.log('结束阅读'); resolve('done'); return; } if (document.querySelector('.alarmClock-wrapper').style.display != 'none') { document.querySelector('.alarmClock-wrapper').click(); console.log('继续播放'); return; } if (document.querySelector('.vcp-player.vcp-playing') == undefined) { const player = document.querySelector('video').click(); document.querySelector('.vcp-bigplay').click(); console.log('开始播放'); return; } } }, 3000); }); } async function coursePage() { console.log('课程学习页面'); if (GM_getValue('设置.config')) { setMute(); } let resourse = await getResourse(); console.log('共找到 ' + resourse.length + '个资源') console.log('开始学习'); if (document.querySelector('.action-timer').querySelector('span').innerText.slice(0, 4) != '您已完成') { for (let i = 0; i < resourse.length; i++) { resourse[i].querySelector('p').click(); await wait(3000); if (resourse[i].querySelector('.icon-media')) { //媒体资源 console.log('媒体资源'); await readResourse(); } else { //文档资源 console.log('文档资源'); await wait(3000); } if (document.querySelector('.action-timer').querySelector('span').innerText.slice(0, 4) == '您已完成') { break; } } } console.log('结束学习'); GM_setValue('studing', false); await wait(1000); window.close(); } if ('https://ipx.yanxiu.com/train2/' == window.location.href.substr(0, 30)) { contentsPage(); } else if ('https://ipx.yanxiu.com/grain/' == window.location.href.substr(0, 29)) { coursePage(); } })();