教学系统挂机插件
当前为
// ==UserScript==
// @name F蓝天
// @namespace https://ty.ji56.cn/temp/Flantian.user.js
// @version 1.0.1
// @description 教学系统挂机插件
// @author Win
// @match *://v3.lt-edu.net/*
// @match *://www.runoob.com/*
// @icon data:image/png;base64,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
// @grant none
// @require https://cdn.bootcss.com/jquery/3.5.1/jquery.min.js
// ==/UserScript==
(function() {
'use strict';
console.log('开始啦');
setTimeout(function(){
//$("video").trigger('play');
plays();
//requests();
},"1000");
//1秒检测一次
setInterval(function(){
//obsClick('.el-message-box__btns > button > .el-button--primary');
clickDOM(".v-modal",".el-message-box__btns button.el-button--primary");
plays();
// 是否播放结束
checkPlayEnd();
},"1000");
document.addEventListener('visibilitychange', function() {
//console.log(document.visibilityState)
switch(document.visibilityState) {
case 'prerender':
console.log('网页预渲染,内容不可见')
break;
case 'hidden':
console.log('内容不可见,处理后台、最小化、锁屏状态')
plays()
//document.getElementsByTagName('video')[0].playbackRate = 4
//$("#video video").play();
break;
case 'visible':
plays()
console.log('处于正常打开')
break;
}
})
//立即播放
function plays(){
setTimeout(function(){
$("video").trigger('play');
var elems = document.querySelectorAll("video, audio");
[].forEach.call(elems, function(elem) { elem.muted = true; });
},"1500");
}
/**
点击
**/
function clickDOM(checkSelector,clickSelector){
let target = document.querySelector(checkSelector);
let clickTarget = document.querySelector(clickSelector);
if(!!target){
clickTarget.click();
}
}
//检测播放结束
function checkPlayEnd(){
let video=document.querySelector("video");
video.addEventListener("ended", function() {
var allNum=$(".swiper-slide").length;
$(".video-status.study").parent(".swiper-slide").next(function(){
var nowNum=$(this);
console.log("播放结束",allNum,nowNum);
this.trigger('video-status');
});
})
}
/**
* 监测到节点后点击
* @param selector CSS选择器
* @param time 延时,负数:延时->执行,正数:执行->延时
* @param desc
* @returns {Promise<unknown>}
*/
function obsClick(selector, time = 0, desc = 'obsClick') {
return new Promise(resolve => {
//obs node
let timer = setInterval(() => {
let target = document.querySelector(selector)
if (!!target) {
clearInterval(timer)
if (time < 0) {
setTimeout(() => {
target.click()
console.log(desc, selector)
resolve(selector)
}, Math.abs(time) * 1000)
} else if (time > 0) {
target.click()
setTimeout(() => {
console.log(desc, selector)
resolve(selector)
}, Math.abs(time) * 1000)
} else {
target.click()
console.log(desc, selector)
resolve(selector)
}
} else {
return
}
}, 100)
})
}
/**
* 监测节点是否存在
* @param selector CSS选择器
* @param time 延时,负数:延时->执行,正数:执行->延时
* @param desc
* @returns {Promise<unknown>}
*/
function obsHas(selector, time = 0, desc = 'obsHas') {
return new Promise(resolve => {
//obs node
let timer = setInterval(() => {
let target = document.querySelector(selector)
if (!!target) {
clearInterval(timer)
if (Math.abs(time) > 0) {
setTimeout(() => {
console.log(desc, selector)
resolve(selector)
}, Math.abs(time) * 1000)
} else {
console.log(desc, selector)
resolve(selector)
}
} else {
return
}
}, 100)
})
}
//请求
function requests(url,method){
method=!!method?method:"get";
GM_xmlhttpRequest({
method: method,
url: url,
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
},
onload: function(response){
console.log(response);
//var name=response.responseText;
//name=JSON.parse(name);
},
onerror: function(response){
console.log("请求失败");
}
});
}
})();