// ==UserScript==
// @name 灯塔在线-dy网络学院
// @namespace **************
// @version 1.1
// @match *.dtdjzx.gov.cn/course/special/*
// @match *.dtdjzx.gov.cn/*
// @author xigua
// @description sddy网络学院在线挂机学习脚本
// @run-at document-start
// @grant none
// @license MIT
// @downloadURL
// @updateURL
// @downloadURL none
// ==/UserScript==
/*---------------------------------------------------------
描述: 灯塔党员网络学院学习
根据郭和lute的脚本改写,重点解决课程页面不自动播放的问题
安装脚本进入课程资源页面后,刷新页面脚本自动执行
----------------------------------------------------------*/
(function() {
'use strict';
/*********************** 公共 ***************************/
const Env = {
app: document.querySelector('.resource')?.__vue__ || document.querySelector('.main_main')?.__vue__,
timeTable: undefined,
handler: null,
autoExam: true,
get name() {
return this.app?.$route?.name;
},
get courseCount() {
return this.fit({
'course-resources': this.app?.holdList.length
});
},
get courseList() {
return this.app?.holdList;
},
fit(obj) {
var result = obj[this.name];
this.validate(result);
return result;
},
validate(result) {
if (result === undefined) console.warn("读取值失败,可能本页无该值,页面--", this.name);
},
update() {
this.app = document.querySelector('.resource')?.__vue__ || document.querySelector('.main_main')?.__vue__;
this.timeTable = undefined;
clearInterval(this?.timerId);
}
};
/*********************** 初始化 *****************************/
function initEnv() {
let panelNode = document.querySelector('.bottom') || document.querySelector('.title-r');
if (!panelNode) {
setTimeout(initEnv, 1000);
return;
}
panelNode.style.cssText += "width:250px";
panelNode.outerHTML = `
`;
let scriptNode = document.createElement('script');
scriptNode.src = "https://unpkg.com/alpinejs@3.10.3/dist/cdn.min.js";
scriptNode.defer = true;
document.head.appendChild(scriptNode);
document.addEventListener('alpine:initialized', () => {
showMsg('脚本.....ok');
routerHook();
});
}
/*********************** 显示消息 *****************************/
function showMsg(msg, type = 'msg') {
if (window.monkeydata == undefined) {
console.error('Alpinejs存在错误');
return;
}
if (type == 'msg') {
window.monkeydata.message = msg;
} else {
window.monkeydata.tip = msg;
}
}
/*********************** 调度 *****************************/
function strategies() {
Env.update();
switch (Env.name) {
case 'projectDetail':
break;
case 'course-resources':
showMsg('course-resources');
timeTableHook();
getCourseList().then(makeTable);
break;
case 'course-detail':
xq();
break;
default:
showMsg('课程资源目录');
}
}
function routerHook() {
setTimeout(strategies, 5000);
}
function timeTableHook() {
Env.timerId = setInterval(() => {
if (!Env.timeTable) return;
if (Env.handler?.closed == false) return;
var c = Env.timeTable.next();
if (c.done) {
console.log('全学完 点击下一页');
document.querySelector('.btn-next').click();
Env.update();
routerHook();
return;
}
Env.handler = window.open(c.value);
}, 2000);
}
/*********************** 课程 *****************************/
function getCourseList() {
showMsg('获取课表......');
return new Promise((resolve, reject) => {
try {
resolve(Env.courseList);
} catch (error) {
reject(error);
}
});
}
function makeTable(res) {
console.log('课表.......ok', res);
showMsg('课表......ok');
Env.timeTable = {
courseList: res,
index: 0,
next() {
var done = this.index >= this.courseList.length;
showMsg(`第${this.index + 1}课...共${this.courseList.length}课`, 'info');
if (done) {
console.warn('没有下一课了');
return { done: true, value: undefined };
}
var course = this.courseList[this.index++];
console.log('准备......', course.courseName);
showMsg(course.courseName);
if (course.studyStatus == 2) { return this.next(); }
else return { done: false, value: `https://dywlxy.dtdjzx.gov.cn/course-resources/course/course-detail?id=${course.id}` };
}
};
}
/*********************** 播放 *****************************/
let sleep = function(time) {
return new Promise(resolve => setTimeout(resolve, time));
};
function autoPlayVideo() {
var videoElement = document.querySelector('video');
if (videoElement) {
videoElement.muted = true;
videoElement.play().then(() => {
console.log("Video played successfully");
addPauseListener(videoElement);
addEndedListener(videoElement);
}).catch(error => {
console.error("Error playing video:", error);
});
} else {
console.log("No video element found on the page.");
}
}
function addPauseListener(videoElement) {
videoElement.addEventListener('pause', () => {
console.log("Video paused, attempting to play...");
videoElement.play().catch(error => {
console.error("Failed to resume video:", error);
});
});
}
function addEndedListener(videoElement) {
videoElement.addEventListener('ended', () => {
console.log("Video ended, closing page...");
window.close();
});
}
window.addEventListener('load', () => {
autoPlayVideo();
var intervalId = setInterval(() => {
var videoElement = document.querySelector('video');
if (videoElement && !videoElement.paused) {
clearInterval(intervalId);
} else if (videoElement) {
autoPlayVideo();
}
}, 20000);
});
initEnv();
})();