Greasy Fork is available in English.
🚀针对U校园,实现在必修章节保持挂机积累学习时长
// ==UserScript==
// @name 💯【U校园】挂必修学习时长防检测
// @namespace http://tampermonkey.net/
// @version 1.21
// @description 🚀针对U校园,实现在必修章节保持挂机积累学习时长
// @author ConRain7
// @match https://ucontent.unipus.cn/_pc_default/pc.html?cid=*
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// 定义启动滚动的时间(毫秒)
let intervalArticle = getRandomInterval(2, 3) * 1000;
let intervalLeft = getRandomInterval(4, 7) * 1000;
let intervalRight = getRandomInterval(5, 11) * 1000;
// 开始滚动
setTimeout(scrollArticle, intervalArticle);
setTimeout(scrollLeft, intervalLeft);
setTimeout(scrollRight, intervalRight);
function scrollArticle() {
let element = document.querySelector('.presentationContent--presentation-article-1vwbU');
if (element) {
let scrollAmount = element.clientHeight;
element.scrollBy(0, scrollAmount);
}
setTimeout(scrollArticle, getRandomInterval(2, 300) * 1000);
}
function scrollLeft() {
let element = document.querySelector('.undefined.left');
if (element) {
let scrollAmount = element.clientHeight;
element.scrollBy(0, scrollAmount);
}
setTimeout(scrollLeft, getRandomInterval(4, 400) * 1000);
}
function scrollRight() {
let element = document.querySelector('.undefined.right');
if (element) {
let scrollAmount = element.clientHeight / 2;
element.scrollBy(0, scrollAmount);
}
setTimeout(scrollRight, getRandomInterval(1, 500) * 1000);
}
///////////////////////////////
setTimeout(() => {
//关闭必修提示弹窗
var x = document.getElementsByClassName("dialog-header-pc--close-yD7oN"); x[0].click();
document.querySelector("div.dialog-header-pc--dialog-header-2qsXD").parentElement.querySelector('button').click();
}, 2500);
function getRandomInterval(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
})();
// 弹窗
(function() {
'use strict';
const modalCSS = `
.modal {
display: flex;
align-items: center;
justify-content: center;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.4);
}
.modal-content {
background-color: #fefefe;
padding: 20px;
border: 1px solid #888;
max-width: 34%;
max-height: 80%;
overflow: auto;
}
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: black;
cursor: pointer;
}
`;
const style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = modalCSS;
document.head.appendChild(style);
const modalHTML = `
<div id="myModal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<h1>欢迎使用U校园学习时长脚本</h1><br>
<h2>U校园学习时长计分规则:</h2>
<p>学习时长大于等于20小时得满分;小于等于0小时不得分;学习时长在0小时至20小时之间,得分为学习时长/20*100*20%。</p>
<h2>U校园学习时长统计规则:</h2>
<p>各必修Task学习时长相加后的累计时长。PC端和App端同时在线学习时,系统只记录其中最近活跃一端的学习时间。</p>
<h2>脚本使用方法:</h2>
<p>打开U校园对应必修学习章节后挂机即可,本脚本会定时翻滚页面,防止出现“长时间未操作”而导致的学习时间无法计入的情况。</p>
<h2>注意:</h2>
<p>※本脚本目前仅支持U校园Reading comprehension和Reading in detail两个模块的挂机,二者任选其一即可。
<br>※挂机时请勿最小化浏览器,防止脚本失灵。</p>
<p>作者/GitHub:@ConRain7
<br>2023.11.25</p>
</div>
</div>
`;
document.body.insertAdjacentHTML('beforeend', modalHTML);
const modal = document.getElementById("myModal");
const span = document.getElementsByClassName("close")[0];
modal.style.display = "flex";
span.onclick = function() {
modal.style.display = "none";
};
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
})();