Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/e396f392205eb5a6913ce8d03a7b7291.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript==
// @name 广东省教育双融双创智慧共享社区
// @namespace http://tampermonkey.net/
// @version 2025-05-29
// @description 广东省教育“双融双创”平台提供教育资源共享、名师工作室和教学研究服务,助力教育事业发展。
// @author yygdz1921
// @match https://srsc.gdedu.gov.cn/course/study?courseId=*
// @match https://srsc.gdedu.gov.cn/course/study/questionnaire?courseId=*
// @match https://srsc.gdedu.gov.cn/course/study/questionnaireContent?courseId=*
// @icon https://www.google.com/s2/favicons?sz=64&domain=gdedu.gov.cn
// @grant none
// @license MIT
// @downloadURL https://update.greasyfork.icu/scripts/537227/%E5%B9%BF%E4%B8%9C%E7%9C%81%E6%95%99%E8%82%B2%E5%8F%8C%E8%9E%8D%E5%8F%8C%E5%88%9B%E6%99%BA%E6%85%A7%E5%85%B1%E4%BA%AB%E7%A4%BE%E5%8C%BA.user.js
// @updateURL https://update.greasyfork.icu/scripts/537227/%E5%B9%BF%E4%B8%9C%E7%9C%81%E6%95%99%E8%82%B2%E5%8F%8C%E8%9E%8D%E5%8F%8C%E5%88%9B%E6%99%BA%E6%85%A7%E5%85%B1%E4%BA%AB%E7%A4%BE%E5%8C%BA.meta.js
// ==/UserScript==
(function() {
'use strict';
// Your code here...
const tick_ms = 15 * 1000; // 检查间隔
const tips = "首次进入【课程学习页】,须您手动开始视频播放!!!";
let count = 0;
let log = function(...args){
console.log(`[Tampermonkey][${(++count).toString().padStart(9, "0")}]`, ...args);
}
const cn_progress = "DN_course_study_resource_tag el-tag el-tag--plain";
// 显示弹出信息
function showPopupMessage(message, duration) {
var popup = document.createElement('div');
popup.innerText = message;
popup.style.display = 'block';
popup.style.position = 'fixed';
popup.style.top = '50%';
popup.style.left = '50%';
popup.style.transform = 'translate(-50%, -50%)';
popup.style.backgroundColor = '#f9f9f9';
popup.style.padding = '20px'; // 增加内边距,防止字体超出边界
popup.style.border = '1px solid #ccc';
popup.style.color = 'red';
popup.style.fontSize = '50px'; // 设置字体大小为50像素
popup.style.maxWidth = '80%'; // 设置最大宽度,防止过长的文本导致元素过宽
popup.style.textAlign = 'center'; // 文本居中显示
popup.style.lineHeight = '1.2'; // 或者具体像素值,例如 '60px'
document.body.appendChild(popup);
// 删除弹出信息
setTimeout(function() {
popup.parentNode.removeChild(popup);
}, duration);
}
// 解析进度标签:进度:9/26
function is_finish(progress){
let [_, ratio] = progress.split(":");
let [l, r] = ratio.split("/");
l = parseInt(l);
r = parseInt(r);
log("[is_finish]", progress, l, ">=", r, l >= r);
return l >= r;
}
// 视频是否播放中
function is_playing(){
// 选择第一个视频元素
const video = document.getElementsByTagName("video")[0];
if (video) {
const isPlaying = !!(
video.currentTime > 0 &&
!video.paused &&
!video.ended &&
video.readyState >= 2
);
log("[is_playing]", "视频正在播放:", isPlaying);
return isPlaying;
} else {
log("[is_playing]", "页面没有视频元素!!!");
return false;
}
}
async function tick(){
try{
log("tick==================================>");
showPopupMessage(`挂机中!(${tips})`, tick_ms);
// 继续学习按钮
let btn_jixu = document.querySelector("body > div:nth-child(9) > div > div.ant-modal-wrap > div > div.ant-modal-content > div > div > div.ant-modal-confirm-btns > button");
if(btn_jixu){
btn_jixu.click();
}
// 目录
let content = document.querySelector("#app > div > div > div > section > main > div > div > div:nth-child(2) > div > div.content > div.x-course-trans.x-infor > div > div.content");
// 遍历章节
let list = content.getElementsByClassName("list");
for(let l of list){
let progress = l.getElementsByClassName("title")[0].getElementsByClassName(cn_progress)[0].innerText;
log("list", l, progress);
// 跳过
if(is_finish(progress) || is_playing()){
continue;
}
// 点一下 第几章
l.getElementsByClassName("title")[0].click();
log("click list");
let sections = l.getElementsByClassName("section");
for(let section of sections){
let section_progress = section.getElementsByClassName(cn_progress)[0].innerText;
log("section", section, section_progress);
// 跳过
if(is_finish(section_progress) || is_playing()){
continue;
}
// 点一下 第几节
section.getElementsByClassName("ant-row")[0].click();
log("click section");
// 点一下 学习任务 让资源列表刷新内容
let headlines = section.getElementsByClassName("headline");
if(headlines.length > 0){
headlines[headlines.length - 1].click();
}
// 切换到资源列表进行操作
let resource = document.getElementsByClassName("x-course-trans c-resourceItem");
for(let res of resource){
let res_progress = res.getElementsByClassName(cn_progress)[0].innerText;
log("res", res, res_progress);
// 跳过
if(res_progress.includes("已完成") || is_playing()){
continue;
}
// 点一下 资源
res.click();
log("click res");
// 阻塞几秒
await new Promise(resolve => setTimeout(resolve, 5000));
// 开始播放
let btn = document.getElementsByClassName("xgplayer-start")[0];
if (btn) {
btn.click();
log("click btn");
// 继续阻塞几秒
await new Promise(resolve => setTimeout(resolve, 5000));
let v = document.getElementsByTagName("video")[0];
if(v){
v.play();
log("开始播放。。。");
} else {
log("video为空!")
}
} else {
log("btn为空!");
}
return;
}
}
}
}catch(e){
log(e);
}finally{
setTimeout(tick, tick_ms);
}
}
// 问卷调查
function question(){
// 单选题 选C
let radios = document.getElementsByClassName("ant-radio-input");
for(let i = 2; i < radios.length; i = i +4){
let radio = radios[i];
radio.click();
}
// 多选题 全选
async function checkAllWithDelay() {
let checkboxes = document.getElementsByClassName("ant-checkbox-input");
for(let j = 0; j < checkboxes.length; j++){
let cb = checkboxes[j];
cb.click(); // 勾选
await new Promise(resolve => setTimeout(resolve, 100));
}
}
checkAllWithDelay();
}
function main(){
// 问卷调查页面
if(location.href.includes("questionnaire")){
showPopupMessage("出现调查题后按一下键盘【G】", tick_ms);
} else {
showPopupMessage(tips, tick_ms);
setTimeout(tick, tick_ms);
}
}
document.addEventListener("keydown", function(event) {
console.log("keydown", event.code);
if (event.code === "KeyG") {
question();
}
});
if (document.readyState === "complete") {
// DOM 已经加载完成
main();
} else {
// DOM 还未加载完成
window.addEventListener("load", main, { once: true });
}
})();