含自动课程播放|跳过课程答题|自动填写作业请咨询
// ==UserScript==
// @name 自考脚本1.0|自动播放|跳过答题|自动写作业
// @version 1.0
// @author Y鱼鱼鱼
// @match https://*.whxunw.com/student-web/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=microsoft.com
// @grant GM_xmlhttpRequest
// @antifeature:fr ads
// @license MIT
// @description 含自动课程播放|跳过课程答题|自动填写作业请咨询
// @namespace https://greasyfork.org/users/1342436
// ==/UserScript==
// @run-at document-start
(function () {
'use strict';
function clear_background_detection() {
// let ele = document.querySelector("head script[src^='js/chunk-vendors'][src$='.js']");
// todo 立即执行一个异步函数,并确保如果该函数抛出错误或返回的 Promise 被拒绝,整个表达式的结果将是 true
// !(async function () {
// let code = await (await fetch(ele.src)).text();
// code = code.replace(`document.addEventListener("visibilitychange",this.visibilityChangeHandler),window.addEventListener("blur",this.windowBlurHandler),window.addEventListener("focus",this.windowFocusHandler),`,``);
// console.log(code)
// eval(code);
// ele.dispatchEvent(new Event("load", {
// bubbles: true,
// }));
// // 如果第二次执行onload则是undefined,则不执行 ,第一次则触发load事件加载修改后的js
// ele.onload && ele.onload();
// })();
}
function sleep(sleepTime) {
return new Promise(resolve => setTimeout(resolve, sleepTime));
}
function get_current_number() {
for (let index = 0; index < play_list.length; index++) {
if (play_list[index].className === "pointer play") {
return index
}
}
return 0
}
//播放检测并自动点击
async function play_check(play_interval) {
// 判断是否需要答题 估计有逻辑bug,需要用节点监视器
answer_check()
await sleep(1000)
// 'Pause' 播放中
// document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-playing > span.vjs-control-text").innerText
// 'Play' 需要点击播放
// document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused > span.vjs-control-text").innerText
// 'Replay' 重新播放,表示已经看完
// document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused.vjs-ended > span.vjs-control-text").innerText
// 判断是否播放暂停
try {
let play_status = document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused > span.vjs-control-text")
let replay_status = document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused.vjs-ended > span.vjs-control-text")
if (play_status != null && play_status.innerText === "Play") {
// 暂停继续播放
console.log("继续播放")
document.querySelector("#valveVideogj > div.vjs-control-bar > button.vjs-play-control.vjs-control.vjs-button.vjs-paused > span.vjs-icon-placeholder").click()
} else if (replay_status != null && replay_status.innerText === "Replay") {
console.log(get_current_number() + 1 + 'xxxxxxx' + play_list.length)
if (get_current_number() + 1 === play_list.length) {
clearInterval(play_interval)
alert("播放完毕")
}
play_list[get_current_number() + 1].click()
console.log("播放下一集")
await sleep(1000)
}
} catch (error) {
}
}
//答题检测
async function answer_check() {
if (document.querySelector("#app > div.layout > div.layout-body > div.layout-main > div.p-12.flex > div.dilog") != null) {
//随机选择单选题
var randomNumber = Math.floor(Math.random() * 4) + 1;
document.querySelector("#app > div.layout > div.layout-body > div.layout-main > div.p-12.flex > div.dilog > div > div.context > div > div > div.list > div:nth-child(" + randomNumber + ") > div.txt").click()
//确定
document.querySelector("#app > div.layout > div.layout-body > div.layout-main > div.p-12.flex > div.dilog > div > div.bottoms > button > span").click()
//关闭
document.querySelector("#app > div.layout > div.layout-body > div.layout-main > div.p-12.flex > div.dilog > div > div.bottoms > button > span").click()
console.log("完成答题")
}
}
function get_play_list() {
let num_list = []
let series_list = document.querySelectorAll("#pane-0 > ul > li")
for (let i = 0; i < series_list.length; i++) {
let series_child = series_list[i].querySelectorAll("ul > li")
if (series_child.length === 1) {
num_list.push(series_child[0])
} else {
for (let j = 0; j < series_child.length; j++) {
num_list.push(series_child[j])
}
}
}
return num_list
}
let play_list = []
function clear_foreground_detection(){
let oldadd = EventTarget.prototype.addEventListener
EventTarget.prototype.addEventListener = function (...args) {
if (unsafeWindow.onblur !== null) {
unsafeWindow.onblur = null;
}
if (args.length !== 0 && args[0] === 'visibilitychange') {
return;
}
if (unsafeWindow.onfous !== null) {
unsafeWindow.onfous = null;
}
return oldadd.call(this, ...args)
}
}
window.addEventListener('load', async function () {
document.querySelector('#app').__vue__.$router.afterHooks.push(async()=>{
console.log('路由发生改变')
if (location.href.includes("study-detail")) {
clear_foreground_detection()
await sleep(2000)
document.querySelector("body > div.el-message-box__wrapper > div > div.el-message-box__btns > button.el-button.el-button--default.el-button--small.el-button--primary > span").click()
await sleep(2000)
play_list = get_play_list()
console.log(play_list)
var play_interval = setInterval(() => {
play_check(play_interval)
}, 5000);
}
})
alert("当前页面啥也不用点,谢谢合作")
if (location.href.includes("study-detail")) {
clear_foreground_detection()
await sleep(2000)
document.querySelector("body > div.el-message-box__wrapper > div > div.el-message-box__btns > button.el-button.el-button--default.el-button--small.el-button--primary > span").click()
await sleep(2000)
play_list = get_play_list()
console.log(play_list)
var play_interval = setInterval(() => {
play_check(play_interval)
}, 5000);
}
});
})();