Greasy Fork is available in English.
云继教平台课刷课
// ==UserScript==
// @name 云继教平台-第一版刷课脚本
// @namespace https://saas.yunteacher.com/
// @version 1.1.2
// @description 云继教平台课刷课
// @author 泉水指挥官
// @match *://*.yunteacher.com/*
// @icon http*://www.google.com/s2/favicons?sz=64&domain=yunteacher.com
// @grant none
// @license GPL
// ==/UserScript==
(function () {
'use strict';
setTimeout(init, 3000)
let timeSet = new Set();
function init() {
console.log("准备初始化")
const currentUrl = window.location.href;
if (currentUrl.includes('saas.yunteacher.com/index')) {
document.querySelector(".avatar").click()
setTimeout(GoToStudyPage, 2000)
} else if (currentUrl.includes('saas.yunteacher.com/space/workbench')) {
setTimeout(GoToStudyPage, 2000)
} else if (currentUrl.includes('saas.yunteacher.com/module/zzxx/learningTask')) {
getShouldViewCourse()
} else {
console.log("学习页面")
// 启动定时器
handleStudyPage();
}
}
function handleStudyPage() {
timeSet.clear()
setInterval(function (){
let hasNoStudyTime = document.querySelector(".notStudied")
if (hasNoStudyTime) {
let timeLeft = hasNoStudyTime.textContent.trim()
console.log("剩余时间 " + timeLeft)
console.log(timeSet)
if (timeSet.has(timeLeft)) {
console.log("页面卡住了,可能需要刷新")
timeSet.clear()
location.reload()
} else {
timeSet.add(timeLeft)
}
}
}, 20000)
setInterval(function () {
console.log("学习页面-----------")
const startIdx = document.querySelector(".startLearningDialog");
if (startIdx) {
const divStyle = window.getComputedStyle(startIdx);
console.log(divStyle.display);
if (divStyle.display !== "none") {
console.log("有开始学习按钮,关掉");
const start = document.querySelector(".startLearningBtn");
start.click();
}
}
console.log('定时器存活');
let leftBox = document.querySelectorAll(".courseCatalogue_box")
if (leftBox.length === 0) {
document.querySelector(".courseCatalogue_item").click();
}
const isCompleted = document.querySelector(".completed");
if (!isCompleted) {
console.log("当前章节未完成,请继续观看")
return
}
setTimeout(function () {
console.log("页面加载成功---等待查询待学视频")
const courseBoxes = document.querySelectorAll('.courseVignette_box');
console.log(courseBoxes)
let shouldStop = false;
// 计算必修的数量
let vignetteList = document.querySelectorAll(".vignetteCompulsory")
let curCourseShouldView = 0;
let curCourseAllView = 0;
for (const vignette of vignetteList) {
if (vignette.textContent.trim() === "必修") {
curCourseShouldView++
}
}
console.log("curCourseShouldView " + curCourseShouldView);
for (const courseBox of courseBoxes) {
let curCourse = courseBox.querySelector('.vignette_title').textContent.trim()
console.log("当前遍历的是:" + curCourse)
if (shouldStop) {
console.log("在观看了。不继续遍历")
break;
}
const vignetteCompulsory = courseBox.querySelector('.vignetteCompulsory').textContent.trim();
const learningStatus = courseBox.querySelector('.learningStatus span').textContent.trim();
console.log("标题:" + curCourse + " 是否必选:" + vignetteCompulsory + " 学习状态为 " + learningStatus)
if (vignetteCompulsory === "必修" && learningStatus === "已学完") {
curCourseAllView++
console.log("这个必修视频已看完 " + curCourse)
}
if (courseBox.classList.contains("active")) {
console.log("当前正在观看的视频,跳过")
continue
}
if (vignetteCompulsory === "必修" && learningStatus !== "已学完") {
console.log("即将观看 " + curCourse);
timeSet.clear()
courseBox.click();
shouldStop = true;
break;
}
}
console.log("curCourseAllView " + curCourseAllView);
if (curCourseShouldView <= curCourseAllView) {
let data = document.querySelector(".course_title").textContent.trim();
setStore("list", data)
console.log("curCourseAllView " + curCourseAllView);
console.log("本章节观看结束,准备跳到下章节");
timeSet.clear()
// clearInterval(intervalId); // 确保清除定时器
window.location.href = "https://saas.yunteacher.com/module/zzxx/learningTask?projectId=1005&roleId=26971";
}
}, 2000)
}, 4000)
}
function GoToStudyPage() {
const btns = document.querySelectorAll(".active_operation");
console.log("--------------------------------------------------------");
console.log(btns);
console.log("--------------------------------------------------------");
btns.forEach(function (btn) {
console.log("我跳!")
btn.click();
});
}
function getShouldViewCourse() {
const btnLearns = document.querySelectorAll(".learningProcess_box_subLevel_item");
console.log("长度为 " + btnLearns.length);
let shouldStop = false;
let viewedTitle = getStore('list')
console.log(viewedTitle)
for (const btnLearn of btnLearns) {
if (shouldStop) break;
const items = btnLearn.querySelectorAll('.learningProcess_box_subLevelItem_content_right');
const itemTitle = btnLearn.querySelector(".learningProcess_box_subLevelItem_content_text").textContent.trim().split("】")[1]
console.log(itemTitle)
if (viewedTitle.includes(itemTitle)) {
console.log("我已经看过了" + itemTitle)
continue
}
console.log("点击查看视频 " + itemTitle)
btnLearn.click();
break;
}
}
// data是需要累加的数据
function setStore(key, data) {
const list = JSON.parse(localStorage.getItem(key)) || []
list.push(data)
localStorage.setItem(key, JSON.stringify(list))
}
function getStore(key) {
return localStorage.getItem(key)
}
})();