// ==UserScript==
// @name 😋全网首个😋云班课精品课视频_突破已观看进度mosoteach
// @namespace Violentmonkey Scripts
// @match *://mooc.mosoteach.cn/course-study/*
// @grant GM_addStyle
// @version 1.0
// @author 大宇同学
// @icon https://cdn.jsdelivr.net/npm/davan-cdn@1.0.5/img/home.png
// @description 针对云班课精品课视频_已观看进度的突破_此类课程用强制拖动进度条方法和倍速方法是没有用的
// @license MIT
// @downloadURL https://update.greasyfork.icu/scripts/490074/%F0%9F%98%8B%E5%85%A8%E7%BD%91%E9%A6%96%E4%B8%AA%F0%9F%98%8B%E4%BA%91%E7%8F%AD%E8%AF%BE%E7%B2%BE%E5%93%81%E8%AF%BE%E8%A7%86%E9%A2%91_%E7%AA%81%E7%A0%B4%E5%B7%B2%E8%A7%82%E7%9C%8B%E8%BF%9B%E5%BA%A6mosoteach.user.js
// @updateURL https://update.greasyfork.icu/scripts/490074/%F0%9F%98%8B%E5%85%A8%E7%BD%91%E9%A6%96%E4%B8%AA%F0%9F%98%8B%E4%BA%91%E7%8F%AD%E8%AF%BE%E7%B2%BE%E5%93%81%E8%AF%BE%E8%A7%86%E9%A2%91_%E7%AA%81%E7%A0%B4%E5%B7%B2%E8%A7%82%E7%9C%8B%E8%BF%9B%E5%BA%A6mosoteach.meta.js
// ==/UserScript==
(function () {
'use strict';
// 创建控制面板的HTML
var panelHTML = `
云班课精品课视频专刷进度小助手_V1.0
By:大宇同学
参数一:
参数二:
参数三:
当前Token:
当前进度:%
进度到110%时,请刷新一次页面查看侧边栏的观看进度
如果发现还是已观看XX%,请手动点击刷新继续刷
如果显示已学习,请手动切换到下一课,并手动刷新一下页面即可继续刷进度
`;
// 在页面上添加控制面板
document.body.insertAdjacentHTML('beforeend', panelHTML);
// 样式
GM_addStyle(`
#controlPanel {
box-shadow: 0px 0px 30px #FFC0CB;
}
#btnAction:hover {
background-color: #0056b3;
}
`);
// 获取当前课程URL参数
const currentPageUrl = window.location.href;
// 使用 URL 对象解析 URL
const url = new URL(currentPageUrl);
// 获取 pathname 中的部分
const pathnameParts = url.pathname.split('/');
// 分别获取所需的部分
const firstPart = pathnameParts[2];
const secondPart = pathnameParts[3];
const thirdPart = url.searchParams.get('currentOid');
// 找到token
const token = localStorage.getItem('_token');
// 显示到控制面板上
document.getElementById('param1').textContent = firstPart;
document.getElementById('param2').textContent = secondPart;
document.getElementById('param3').textContent = thirdPart;
document.getElementById('currentToken').textContent = token;
let currentProgress = 0;
const progressSpan = document.getElementById('currentProgress');
// 按钮点击事件:执行操作(示例)
document.getElementById('btnAction').addEventListener('click', function () {
// 这里可以添加你想要执行的操作
alert('刷新完成!(´▽`ʃ♡ƪ)');
});
// 自增当前进度
const increaseProgress = setInterval(() => {
currentProgress++;
progressSpan.textContent = currentProgress;
if (currentProgress >= 110) {
clearInterval(increaseProgress); // 停止自增
}
}, 3000); // 每两秒增加1%
// 按钮点击事件:刷新页面
document.getElementById('btnAction').addEventListener('click', function() {
location.reload();
});
// 监视 DOM 的变化,并在检测到新的 video 元素时执行删除操作
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
mutation.addedNodes.forEach(function (node) {
if (node.nodeName.toLowerCase() === 'video') {
node.parentNode.removeChild(node);
}
});
});
});
// 配置 MutationObserver 监视的目标节点和选项
var observerConfig = { childList: true, subtree: true };
// 启动 MutationObserver
observer.observe(document.body, observerConfig);
////////////////////////////////////////////////////////
//请求POST
// 定义请求参数
var myHeaders = new Headers();
myHeaders.append("Host", "coreapi-proxy.mosoteach.cn");
myHeaders.append("Connection", "close");
myHeaders.append("Content-Length", "20");
myHeaders.append("sec-ch-ua", "\"Chromium\";v=\"122\", \"Not(A:Brand\";v=\"24\", \"Google Chrome\";v=\"122\"");
myHeaders.append("Accept", "application/json, text/plain, */*");
myHeaders.append("Content-Type", "application/json");
myHeaders.append("X-token", token);
myHeaders.append("sec-ch-ua-mobile", "?0");
myHeaders.append("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36");
myHeaders.append("sec-ch-ua-platform", "Windows");
myHeaders.append("Origin", "https://mooc.mosoteach.cn");
myHeaders.append("Sec-Fetch-Site", "same-site");
myHeaders.append("Sec-Fetch-Mode", "cors");
myHeaders.append("Sec-Fetch-Dest", "empty");
myHeaders.append("Referer", "https://mooc.mosoteach.cn/");
myHeaders.append("Accept-Encoding", "gzip, deflate");
myHeaders.append("Accept-Language", "zh-CN,zh;q=0.9");
var raw = JSON.stringify({
"watchTo": 9999.9999
});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
// 定义循环次数
var numberOfRequests = 110; // 例如,这里定义为 10 次循环
// 定义延迟时间(毫秒)
var delayBetweenRequests = 3000; // 1秒
// 循环执行请求
for (var i = 0; i < numberOfRequests; i++) {
setTimeout(function () {
fetch(`https://coreapi-proxy.mosoteach.cn/index.php/online-courses/${firstPart}/plans/${secondPart}/resources/${thirdPart}/progress`, requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));
}, i * delayBetweenRequests); // 这里使用 i * delayBetweenRequests 来实现逐渐增加的延迟
}
})();