Greasy Fork is available in English.
芯位教育网课自动跳转到下一节课
当前为
// ==UserScript==
// @name 芯位教育自动刷课
// @namespace https://gitee.com/CreativeNew/
// @version 1.0.0
// @description 芯位教育网课自动跳转到下一节课
// @author XuTao.
// @match https://teaching.51xinwei.com/*
// @icon https://teaching.51xinwei.com/*
// @grant none
// @run-at document-end
// @license AGPL-3.0 license
// ==/UserScript==
(function() {
'use strict';
})();
const body = document.querySelector('body');
let obServer = new MutationObserver(handler);
const options = {
childList: true
}
obServer.observe(body, options)
function handler(mutationRecordList) {
for (let i = 0; i < mutationRecordList.length; i++) {
let addedNodes = mutationRecordList[i].addedNodes
for (let i = 0; i < addedNodes.length; i++) {
if (addedNodes[i].innerText.indexOf('学习下一课节') > 0) {
//单击下一节课按钮
obsClick('.layui-layer.layui-layer-dialog .layui-layer-btn0');
break;
}
}
}
//检测是否为预览文档页
obsText('#page_learn_courseware_document .transcode-file-area.text-center', '该文档类型不支持预览,请点击 这里 下载文档')
.then((res) => {
let courseChapterItem = document.querySelectorAll('.course_chapter_item.user-no-select.ng-scope')
let activeItem = document.querySelector('.course_chapter_item.user-no-select.ng-scope.active')
let activeItemText = activeItem.innerText
for (let i = 0; i < courseChapterItem.length; i++) {
if (activeItemText == courseChapterItem[i].innerText) {
courseChapterItem[i + 1].children[1].click()
break;
}
}
})
}
let obsClickTimer = null
/**
* 监测到节点后点击
* @param selector CSS选择器
* @returns {Promise<unknown>}
*/
function obsClick(selector) {
return new Promise((resolve, reject) => {
let startExecutionTime = new Date().getTime()
if (obsClickTimer) {
clearInterval(obsClickTimer)
}
obsClickTimer = setInterval(() => {
let target = document.querySelector(selector)
if (target) {
clearInterval(obsClickTimer)
target.click()
resolve({
element: selector,
operation: 'click'
})
} else {
return
}
let executionTime = new Date().getTime()
if (startExecutionTime - executionTime > 1000 * 10) {
clearInterval(obsClickTimer)
reject('超时')
}
}, 500)
})
}
let obsTextTimer = null
/**
* 监测节点内容
* @param selector CSS选择器
* @param text 节点内容
* @returns {Promise<unknown>}
*/
function obsText(selector, text) {
return new Promise((resolve, reject) => {
let startExecutionTime = new Date().getTime()
if (obsTextTimer) {
clearInterval(obsTextTimer)
}
obsTextTimer = setInterval(() => {
let target = document.querySelector(selector)
if (target && target.textContent.trim() == text) {
clearInterval(obsTextTimer)
resolve(selector)
} else {
return
}
let executionTime = new Date().getTime()
if (startExecutionTime - executionTime > 1000 * 10) {
clearInterval(obsTextTimer)
reject('超时')
}
}, 500)
})
}