您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
hello world!
// ==UserScript== // @name 网课学习 // @namespace http://tampermonkey.net/ // @version 0.2 // @description hello world! // @author Ymob // @match https://kc.jxjypt.cn/* // @grant none // ==/UserScript== (function () { 'use strict'; /** * 看学习视频 */ class WatchVideo { /** * 是否跳过视频,直接答题 */ bug /** * 章列表 */ chapterList /** * 章索引 */ chapterIndex /** * 节索引 */ sectionIndex /** * 循环查找控制器 */ ctl /** * 播放进度监听间隔 */ interval /** * */ constructor() { this.bug = false this.chapterList = [] this.chapterIndex = this.sectionIndex = -1 this.ctl = true this.interval = 10000 setTimeout(() => { if (confirm('开始自动学习?')) { // this.bug = confirm('是否直接答题?') this.start() } }, 2000); } /** * 开始学习 */ start() { document.querySelectorAll('.course-l .course-list-txt').forEach(item => { let chapter = { node: item, name: item.querySelector('dt').innerText.trim(), sectionList: [] } item.querySelectorAll('dd').forEach(section => { chapter.sectionList.push({ node: section, name: section.innerText.trim(), done: section.querySelector('i').classList.contains('z-icon-red') }) }) this.chapterList.push(chapter) }); this.find() } /** * 查找待学习的课程 */ find() { this.ctl = true this.chapterIndex = this.sectionIndex = -1 this.chapterList.every((chapter, chapterIndex) => { chapter.sectionList.every((section, sectionIndex) => { if (!section.done) { this.chapterIndex = chapterIndex this.sectionIndex = sectionIndex } return this.ctl = section.done }) return this.ctl }) if (this.sectionIndex == -1) { alert('本科目已经完成学习') return } // 选择章节 this.currentChapter().node.querySelector('dt').click() this.currentSection().node.click() if (this.bug) { setTimeout(() => { this.anwser() }, 1000); } else { setTimeout(() => { this.play() }, 2000); } } /** * 当前章 */ currentChapter() { return this.chapterList[this.chapterIndex] } /** * 当前节 */ currentSection() { return this.currentChapter().sectionList[this.sectionIndex] } /** * 播放视频学习 */ play() { console.log('播放课程,开始学习 ' + this.currentSection().name) let _videoNode = document.querySelector('#video-content video') _videoNode.play() // 设置播放进度 let lastWatchText = document.querySelector('#lastWatch').innerText.match(/(\d+分\d+)|\d+/) if (lastWatchText != null) { let lastWatch = lastWatchText[0].split('分') _videoNode.currentTime = (Number.parseInt(lastWatch[lastWatch.length - 1]) | 0) + (Number.parseInt(lastWatch[lastWatch.length - 2]) | 0) * 60 // console.log('设置播放进度', lastWatch) } // 视频时常 let _duration = _videoNode.duration // console.log('设置播放音量') _videoNode.volume = 0.05 // 提前选择答案 document.querySelector('.sub-answer .m-question-option').click() // 最短播放时长 let _minText = document.querySelector('#tips').innerText.match(/(\d+分\d+)|\d+/)[0].split('分') let _minTime = (Number.parseInt(_minText[_minText.length - 1]) | 0) + (Number.parseInt(_minText[_minText.length - 2]) | 0) * 60 _minTime = _minTime > _duration ? _duration : _minTime // 监听播放进度 let _index = setInterval(() => { if (_videoNode.currentTime >= _minTime) { clearInterval(_index) console.log('暂停播放,完成学习 ' + this.currentSection().name) _videoNode.pause() this.anwser() } else { // console.log('学习未完成 ' + _videoNode.currentTime) } }, this.interval) } anwser() { window.PageVars.watchTime = 501 new Anwser(document.querySelector('.m-question')) setTimeout(() => { this.chapterList[this.chapterIndex].sectionList[this.sectionIndex].done = true this.find() }, 2000); } } /** * 课程作业 */ class Task { /** * 问题列表 */ questionList /** * 课程列表 */ courseList courseIndex constructor() { this.questionList = [] this.courseList = [] this.courseIndex = -1 } /** * 获取课程列表 */ init() { setTimeout(() => { if (confirm('开始自动学习')) { document.querySelectorAll('.zt.zt-goto').forEach(item => { if (item.innerHTML.trim() == '开始答题') { this.courseList.push({ node: item, done: false, }) } }) console.log('共 ' + this.courseList.length + ' 节课程作业') this.findCourse() } }, 1000); } /** * 选择作业 * @param {*} index */ findCourse(index = 0) { if (index < this.courseList.length) { if (this.courseList[index].done) { this.findCourse(++index) } else { let _time = (new Date).getTime() let _s = this.courseList[index].node.search // 打印名称 console.log('课堂作业:' + this.courseList[index].node.parentNode.parentNode.firstElementChild.innerText) // 设置任务 localStorage.setItem(_s, '') this.courseList[index].node.click() let _index = setInterval(() => { if (localStorage.getItem(_s) == 'true') { clearInterval(_index) console.log('已完成,耗时:' + ((new Date).getTime() - _time) / 1000 + '秒 \r\n') this.courseList[index].done = true localStorage.removeItem(_s) this.findCourse(++index) } }, 10000); } } else { alert('已完成全部课程作业') } } /** * 开始答题 */ start() { setTimeout(() => { if (confirm('开始自动答题?')) { this.questionList = document.querySelectorAll('#questionModule>ul>li') console.log('共' + this.questionList.length + '道题') this.anwser() } }, 800); } /** * 开始答题 */ anwser(index = 0) { if (index < this.questionList.length) { let t = this.random(5000, 12000) setTimeout(() => { new Anwser(this.questionList[index]) this.anwser(index + 1) console.log('耗时:' + t) }, t); } else { console.log('交卷') setTimeout(() => { document.querySelector('#btn__submit').click() setTimeout(() => { window.close() localStorage.setItem(location.search, 'true') }, 2000) }, 1000) } } random(min, max) { return Math.floor(Math.random() * (max - min)) + min; } } /** * 答题 */ class Anwser { /** * 问题节点 */ node /** * 是否是选择题(不是简单题) */ isSelect /** * * @param {*} node */ constructor(node = document) { this.node = node let tempNode = node.querySelector('.m-question .subject-con') if (tempNode != null) { this.isSelect = !tempNode.classList.contains('jiandati') } else { this.isSelect = true } this.anwser() } /** * 查找答案 */ anwser() { let anwserNode = this.node.querySelector('.da-list .right') || this.node.querySelector('.da-list .wenzi') let anwser = anwserNode.innerText.trim() console.log('************************') console.log(this.node.querySelector('.sub-dotitle').innerText.replace('\n', '、')) console.log('答案:' + anwser) if (this.isSelect) { this.node.querySelector('dd[data-value="' + anwser + '"]').click() } else { this.node.querySelector('textarea').value = anwser } } } function init() { let pathname = location.pathname switch (pathname) { // 看视频学习 case '/classroom/index': new WatchVideo break // 课程作业-列表 case '/classroom/exercise': (new Task).init() break // 课程作业-详情 case '/paper/start': (new Task).start() break default: break } } init() })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址