您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Automate course learning on enetedu.com
当前为
// ==UserScript== // @name EneteduAssistant-教师网培中心2X速 // @namespace http://tampermonkey.net/ // @version 1.0 // @license MIT // @description Automate course learning on enetedu.com // @author KKG&DS // @match https://onlinenew.enetedu.com/gtcfla/MyTrainCourse/OnlineCourse* // @match https://onlinenew.enetedu.com/gtcfla/MyTrainCourse/ChoiceCourse* // @match https://onlinenew.enetedu.com/*/MyTrainCourse/ChoiceCourse* // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @run-at document-end // ==/UserScript== (function () { 'use strict'; const SCRIPT_VERSION = '1.0'; // 脚本版本 let volumeLevel = 0.1; // 音量为 10% let playbackRate = 2.0; // 播放速率为 2 倍 // 添加状态栏 GM_addStyle(` #eneteduHelperStatus { position: fixed; top: 10px; right: 10px; background: rgba(0, 0, 0, 0.6); color: white; padding: 10px; border-radius: 5px; font-family: Arial, sans-serif; font-size: 14px; z-index: 10000; display: block; } `); // 模拟桌面端用户代理 Object.defineProperty(navigator, 'userAgent', { value: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', configurable: true }); // 禁用设备检测函数 window.goPAGE = function () {}; // 页面加载完成后初始化 window.addEventListener('load', () => { let statusDiv = document.createElement('div'); statusDiv.id = 'eneteduHelperStatus'; document.body.appendChild(statusDiv); updateStatus(`脚本已加载 (v${SCRIPT_VERSION})`); startVideoControl(); }); // 更新状态栏 function updateStatus(message) { let statusDiv = document.getElementById('eneteduHelperStatus'); if (statusDiv) { statusDiv.textContent = `EneteduHelper v${SCRIPT_VERSION}: ${message}`; } } // 开始视频控制 function startVideoControl() { let playerCheckInterval = setInterval(() => { let player = getVideoPlayer(); if (player) { clearInterval(playerCheckInterval); handleVideo(player); startProgressMonitor(player); startPlaybackMonitor(player); startPopupMonitor(); } else { updateStatus('等待视频播放器...'); } }, 1000); } // 获取视频播放器 function getVideoPlayer() { let iframe = document.querySelector('iframe'); if (iframe) { try { let iframeDocument = iframe.contentDocument || iframe.contentWindow.document; let player = iframeDocument.querySelector('video'); if (player) { return player; } } catch (error) { updateStatus('无法访问 iframe 内容(跨域限制)'); return null; } } return null; } // 处理视频播放 function handleVideo(player) { // 设置视频音量为 10% if (player.volume !== undefined) { player.volume = volumeLevel; updateStatus(`音量设置为 ${volumeLevel * 100}%`); } // 设置视频播放速率为 2 倍 if (player.playbackRate !== undefined) { player.playbackRate = playbackRate; updateStatus(`播放速率设置为 ${playbackRate} 倍`); } // 确保视频静音并播放 if (player.muted !== undefined) { player.muted = true; } if (player.paused) { player.play(); updateStatus('视频正在播放'); } // 定期保存播放进度 setInterval(() => { if (player.currentTime !== undefined && player.duration !== undefined) { let currentTime = player.currentTime; let duration = player.duration; let progress = (currentTime / duration) * 100; // 避免拖拽进度条 if (Math.abs(currentTime - player.currentTime) > 1) { player.currentTime = currentTime; updateStatus('检测到拖拽进度条,已恢复'); } GM_setValue('lastPlaybackTime', currentTime); updateStatus(`播放中,音量:${volumeLevel * 100}%,进度:${progress.toFixed(2)}%`); } }, 5000); } // 监控课程进度 function startProgressMonitor(player) { setInterval(() => { if (player && player.currentTime !== undefined && player.duration !== undefined) { let progress = (player.currentTime / player.duration) * 100; if (progress >= 100) { playNextCourse(); } } }, 1000); } // 监控视频播放状态 function startPlaybackMonitor(player) { setInterval(() => { if (player.paused) { player.play(); updateStatus('视频已暂停,恢复播放'); } }, 1000); } // 监控弹窗 function startPopupMonitor() { setInterval(() => { let popup = document.querySelector('.layui-layer-page'); if (popup) { let confirmButton = popup.querySelector('.layui-layer-btn0'); if (confirmButton) { confirmButton.click(); updateStatus('检测到弹窗,已确认'); } else { updateStatus('检测到弹窗,但未找到确认按钮'); } // 恢复视频播放 let player = getVideoPlayer(); if (player && player.paused) { player.play(); updateStatus('弹窗出现,恢复视频播放'); } } }, 1000); } // 播放下一个课程 function playNextCourse() { let courseItems = document.querySelectorAll('.classcenter-chapter2 ul li'); let currentCourseIndex = -1; // 查找当前正在播放的章节 courseItems.forEach((item, index) => { if (item.style.backgroundColor === 'rgb(204, 197, 197)') { // 当前章节的背景色 currentCourseIndex = index; } }); if (currentCourseIndex !== -1 && currentCourseIndex < courseItems.length - 1) { // 查找下一个未完成的章节 for (let i = currentCourseIndex + 1; i < courseItems.length; i++) { let progressText = courseItems[i].querySelector('span').innerText.trim(); if (progressText !== '[100%]') { // 获取章节的跳转链接 let nextCourseLink = courseItems[i].getAttribute('onclick'); if (nextCourseLink) { // 提取链接地址 let match = nextCourseLink.match(/location\.href='([^']+)'/); if (match && match[1]) { // 跳转到下一个章节 window.location.href = match[1]; updateStatus('开始下一个课程'); return; } } } } } // 如果所有章节都已完成,返回上一页 updateStatus('所有课程已完成,返回上一页'); window.history.back(); } })();