// ==UserScript== // @name 学堂在线刷课 // @namespace http://tampermonkey.net/ // @version 0.2.1 // @description 该脚本可以完成学堂在线课程中的作业,视频以及图文 // @author 2454988619@qq.com // @match https://www.xuetangx.com/* // @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js // @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== // @grant none // @license GNU GPLv3 // @downloadURL none // ==/UserScript== (function() { 'use strict'; // DOM添加 let div = `
tips:该脚本为个人开发,可以刷图文,视频以及作业, 目前作业功能需要先用小号收集题库才能正常使用
题目 答案
` document.querySelector("body").insertAdjacentHTML('beforeend', div) let main = document.querySelector('#main') function addConfigBoxStyle() { // 添加样式 let style = document.createElement('style') style.type = "text/css"; let styleString = ` * { padding: 0; margin: 0; } #main { position: absolute; right: 100px; top: 150px; width: 300px; z-index: 999; background-color:rgb(0 118 128 / 30%); } .a-header { text-align: center; height: 90px; font-size: 14px; line-height: 20px; background-color: green; color: #fff; padding:5px; } .a-table tbody, .a-table tr { display: block; width: 300px; } .a-table tbody { height: 270px; overflow-y: scroll; -ms-overflow-style: none; } .a-table td, .a-table th { text-align: center; width: 150px; } .a-table button { padding: 10px; cursor: pointer; border-radius: 15%; color: #fff; font-size: 15px; width: 90px; text-align: center; } .reading, .collect, .random { background-color: rgb(153, 58, 58); } .disabled { background-color: gray !important; cursor: not-allowed !important; } .running { background-color: rgb(46, 157, 103); } ` let text = document.createTextNode(styleString) style.appendChild(text); document.getElementsByTagName('head')[0].appendChild(style); } addConfigBoxStyle() // 添加表格列表 function rander(timu, anwers) { let tr = ` ${timu} ${anwers} ` document.querySelector('#main .a-table table tbody').insertAdjacentHTML('beforeend', tr) } // 控制脚本页面样式 function toggleClassBtn(config, startE, disE) { if (startE == 'reading') { config ? $(`.${startE}`).text('停止') : $(`.${startE}`).text('开始刷课') } else { config ? $(`.${startE}`).text('停止') : $(`.${startE}`).text('开始收集') } $(`.${startE}`).toggleClass('running') $(`.${disE}`).attr('disabled', config).toggleClass('disabled') } // 创建对象 function anw(type, timu, an) { this.type = type; this.timu = timu; this.anwers = an; } // 视频脚本 function startVideo() { let video = $("video")[0]; let staNow = $(".play-btn-tip"); if (staNow.text() == "播放") { $(".xt_video_player_mask").click(); } let c = video.currentTime; let d = video.duration; //不想关闭声音可以把此行代码删掉 soundClose(); speed(); //视频播放进度超过95%跳转下一节视频 if ((c / d) > 0.95) { $(".next").click(); console.log("跳转到下一节"); console.log("本节观看百分比" + c / d); } } //关闭视频声音 function soundClose() { let sound = $(".xt_video_player_common_icon_muted"); if (sound.length == 0) { $(".xt_video_player_common_icon").click(); } } //播放速度2.0 function speed() { let speed = $(".xt_video_player_common_list"); let speedChild = speed.children()[0]; let gp = "wi"; speedChild.click(); } // 刷附件 let word = function () { let next = document.querySelector('.btnCon button'); let click = new Event('mouseup'); next.dispatchEvent(click); if ($(next).text() == '我已看完') { $('.next').click() } } // 刷题 function automaticAnswers(tiku) { let click = new Event('mouseup'); let timu = document.querySelector('.fuwenben').innerText; let next = document.querySelector('.btnCon').querySelectorAll('button')[1]; let total = document.querySelector('.total').innerHTML.substring(1, 3); let curent = document.querySelector('.curent').innerHTML; let delay = 1000; // 延时1秒 let anw = tiku.find(item => item.timu == timu) // 判断题型 if (anw.length == 0) { $('next').click() } if (anw.type == 1) { // 选择题 anw.anwers.forEach(item => { let num = null switch (item) { case 'A': num = 0 break; case 'B': num = 1 break; case 'C': num = 2 break; case 'D': num = 3 break; case 'E': num = 4 break; case 'F': num = 5 break; case 'G': num = 6 break; default: break; } let anwersEven = document.querySelector('.answerList').querySelectorAll('span')[num]; anwersEven.click() }); rander(anw.timu, anw.anwers) } else if (anw.type == 2) { // 判断题 let anwersEven = document.querySelector('.answerList').querySelectorAll('span')[anw.anwers]; anwersEven.click() rander(anw.timu, anw.anwers) } else { // 填空题 rander(anw.timu, anw.anwers) $('.next').click() } // 提交并跳转下一题 for (let i = 0; i < 2; i++) { // 延时一段时间后模拟点击下一个按钮 setTimeout(function () { next.dispatchEvent(click); }, delay * (i + 1)); } // 跳转下一节 if (total == curent) { setTimeout(function () { $('.next').click() }, 1500) } } // 开始刷课 function startClass() { // 判断页面类型 let types = $('.t1').eq(0).text(); if (types == '视频') { startVideo() } else if (types == '附件') { word() } else if ($('.answerList').length != 0) { let tiku = JSON.parse(localStorage.getItem('anwers')) if (!tiku) { $('.next').click() } automaticAnswers(tiku) } else { console.log("未知错误!"); } } // 开始收集答案 // 选择题 function choiceQuestions() { let anwers = []; let timu = document.querySelector('.fuwenben p').innerText let anwersEven = document.querySelectorAll('.answerList')[1].querySelectorAll('span'); for (let j = 0; j < anwersEven.length; j++) { anwers.push(anwersEven[j].innerText); } let ontime = new anw(1, timu, anwers); return ontime } // 判断题 function judgmentQuestions() { let anwers = null; let timu = document.querySelector('.fuwenben').innerText let anwersEven = document.querySelectorAll('.answerList')[1].querySelector('span'); if (anwersEven.className.indexOf('true') != -1) { anwers = 0; } else { anwers = 1; } let ontime = new anw(2, timu, anwers); return ontime } // 填空题 function textQuestions() { let anwersEven = document.querySelector('.answerList').querySelectorAll('.rightAnswer'); let anwers = []; let timu = document.querySelector('.fuwenben').innerText for (let i = 0; i < anwersEven.length; i++) { anwers.push(anwersEven[i].innerHTML.substring(5)); } let ontime = new anw(3, timu, anwers); return ontime } // 控制跳转下一题 let Next = function () { let next = document.querySelector('.btnCon span>span').querySelector('button'); let click = new Event('mouseup'); next.dispatchEvent(click); } function collectAnwers() { // 学堂在线答案收集 let anwersLists = JSON.parse(localStorage.getItem('anwers')) || []; // 获取答案列表 let total = document.querySelector('.total').innerHTML.substring(1, 3); let curent = document.querySelector('.curent').innerHTML; let typeEven = document.querySelector('.question p').innerText; let right = typeEven.indexOf('('); let type = typeEven.substring(1, right - 1); // 获取答案 if (type == '单选题' || type == '多选题') { anwersLists.push(choiceQuestions()); } else if (type == '判断题') { anwersLists.push(judgmentQuestions()); } else if (type == '填空题') { anwersLists.push(textQuestions()); } else { console.log('错误信息'); } if (total == curent) { setTimeout(function () { $('.next').click() }, 1500) } localStorage.setItem('anwers', JSON.stringify(anwersLists)) Next(); // 跳转下一题 } // 随机答题 function randomAnwers() { let click = new Event('mouseup'); let next = document.querySelector('.btnCon').querySelectorAll('button')[1]; let total = document.querySelector('.total').innerHTML.substring(1, 3); let curent = document.querySelector('.curent').innerHTML; let delay = 1000; // 延时1秒 let typeEven = document.querySelector('.question p').innerText; let right = typeEven.indexOf('('); let type = typeEven.substring(1, right - 1); // 获取答案 if (type == '单选题' || type == '多选题') { let anwersEven = document.querySelector('.answerList').querySelectorAll('span')[0]; anwersEven.click() } else if (type == '判断题') { let anwersEven = document.querySelector('.answerList').querySelectorAll('span')[0]; anwersEven.click() } else { document.querySelector('.next').click() } // 提交并跳转下一题 for (let i = 0; i < 2; i++) { // 延时一段时间后模拟点击下一个按钮 setTimeout(function () { next.dispatchEvent(click); }, delay * (i + 1)); } // 跳转下一节 if (total == curent) { setTimeout(function () { $('.next').click() }, 1500) } } // 添加点击事件 let reading = false let collect = false let random = false let startReading, startCollect, startRandom; // 添加定时器 $('.reading').click(function () { reading = !reading toggleClassBtn(reading, 'reading', 'collect') if (reading) { // 开始刷课事件 clearInterval(startReading) // 重置定时器 startReading = setInterval(startClass, 2000) } else { // 停止事件 clearInterval(startReading) } }) $('.collect').click(function () { collect = !collect toggleClassBtn(collect, 'collect', 'reading') if (collect) { clearInterval(startCollect) // 重置定时器 // 开始收集题目 startCollect = setInterval(collectAnwers, 2000) } else { // 停止事件 clearInterval(startCollect) } }) $('.random').click(function () { random = !random if (random) { clearInterval(startRandom) // 重置定时器 // 开始收集题目 startRandom = setInterval(randomAnwers, 3000) } else { // 停止事件 clearInterval(startRandom) } }) })();