芯位教育自动刷课

芯位教育网课自动跳转到下一节课

// ==UserScript==
// @name         芯位教育自动刷课
// @namespace    https://gitee.com/CreativeNew/
// @version      1.0.2
// @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
		if (addedNodes) {
			for (let i = 0; i < addedNodes.length; i++) {
				let innerText = addedNodes[i].innerText
				if (innerText && innerText.indexOf('学习下一课节') >= 0) {
					obsClick('.layui-layer.layui-layer-dialog .layui-layer-btn0');
					break;
				}
			}
		}
	}

	obsDocumentPage()
}

function obsDocumentPage() {
	obsText('#page_learn_courseware_document .transcode-file-area.text-center', '该文档类型不支持预览,请点击 这里 下载文档')
		.then((res) => {
			let coursewareMenuItem = document.querySelectorAll('#menu_tarr_content .courseware_menu_item.pull-left.ng-scope')
			if (coursewareMenuItem.length > 2) {
				let activeCoursewareMenuItem = document.querySelector('#menu_tarr_content .courseware_menu_item.pull-left.ng-scope.active')
				let activeCoursewareMenuItemText = activeCoursewareMenuItem.innerText
				for (let i = 0; i < coursewareMenuItem.length; i++) {
					if (activeCoursewareMenuItemText == coursewareMenuItem[i].innerText) {
						let next = i + 1
						coursewareMenuItem[next].click()
						if (coursewareMenuItem.length > next+1) {
							obsDocumentPage()
							return
						}
						break;
					}
				}
			}

			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

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)
	})
}

function activation() {
	const localStorage = window.localStorage;
	const activationCodeKey = 'xinwei_activation_code';
	let activationCode = localStorage.getItem(activationCodeKey)
	if (!activationCode) {
		const str ='%u8BF7%u8F93%u5165%u6FC0%u6D3B%u7801%uFF08%u6FC0%u6D3B%u7801%u4E24%u5143%u6C38%u4E45%uFF0C%u53EF%u8054%u7CFB%u5FAE%u4FE1%uFF1Awuwang1873%uFF09%uFF1A'
		let code = prompt(unescape(str), '');
		if (window.atob(code).indexOf('xinweijiaoyu') >= 0) {
			localStorage.setItem(activationCodeKey, code)
            alert(unescape('%u6FC0%u6D3B%u6210%u529F'))
		} else {
            alert(unescape('%u6FC0%u6D3B%u5931%u8D25'))
			return false
		}
	}
	return true
}

let obsTextTimer = null

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)
	})
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址