您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
自动播放完当前视频后播放下一个视频,并自动通过认真度检查
// ==UserScript== // @name 升学e网通视频自动连续播放与认真度检查 // @namespace http://tampermonkey.net/ // @version 1.2 // @description 自动播放完当前视频后播放下一个视频,并自动通过认真度检查 // @author AI Assistant // @match https://teacher.ewt360.com/* // @match https://web.ewt360.com/* // @grant none // ==/UserScript== (function() { 'use strict'; console.log('🎬 升学e网通视频自动连续播放与认真度检查脚本已加载'); // 存储当前状态 let currentVideoEnded = false; let isSwitching = false; let checkInterval = null; let observer = null; // 1. 监控当前视频播放状态 function monitorVideoPlayback() { const videoElement = document.querySelector('video'); if (!videoElement) { console.log('❌ 未找到视频元素,5秒后重试...'); setTimeout(monitorVideoPlayback, 5000); return; } console.log('✅ 找到视频元素,开始监控播放状态'); // 清除旧的事件监听器(避免重复绑定) videoElement.removeEventListener('ended', handleVideoEnded); videoElement.removeEventListener('timeupdate', handleTimeUpdate); videoElement.removeEventListener('error', handleVideoError); // 监听视频结束事件 videoElement.addEventListener('ended', handleVideoEnded); // 监听时间更新(用于调试) videoElement.addEventListener('timeupdate', handleTimeUpdate); // 监听播放错误 videoElement.addEventListener('error', handleVideoError); } function handleVideoEnded() { console.log('📺 当前视频播放结束'); currentVideoEnded = true; playNextVideo(); } function handleTimeUpdate() { const videoElement = document.querySelector('video'); const currentTime = videoElement.currentTime; const duration = videoElement.duration; const progress = ((currentTime / duration) * 100).toFixed(1); // 每10%进度输出一次日志 if (progress % 10 === 0 && currentTime > 1) { console.log(`📊 播放进度: ${progress}% (${formatTime(currentTime)}/${formatTime(duration)})`); } } function handleVideoError(e) { console.error('❌ 视频播放错误:', e); } // 2. 播放下一个视频 function playNextVideo() { if (isSwitching) { console.log('⏳ 正在切换视频中,请稍候...'); return; } isSwitching = true; console.log('🔄 正在查找下一个视频...'); // 获取当前活动的视频项 const currentActiveItem = document.querySelector('.item-blpma.active-EI2Hl'); if (!currentActiveItem) { console.log('❌ 未找到当前活动视频项'); isSwitching = false; return; } // 找到下一个视频项 const allVideoItems = document.querySelectorAll('.item-blpma'); let nextVideoItem = null; let foundCurrent = false; for (let i = 0; i < allVideoItems.length; i++) { if (foundCurrent && !allVideoItems[i].classList.contains('active-EI2Hl')) { nextVideoItem = allVideoItems[i]; break; } if (allVideoItems[i] === currentActiveItem) { foundCurrent = true; } } if (!nextVideoItem) { console.log('✅ 所有视频已播放完成'); isSwitching = false; return; } console.log('👉 找到下一个视频:', nextVideoItem.querySelector('.lessontitle-G206y')?.textContent || '未知标题'); // 点击下一个视频 setTimeout(() => { nextVideoItem.click(); console.log('🎯 已点击下一个视频'); // 等待页面加载新视频 setTimeout(() => { console.log('🔄 新视频加载中,等待5秒...'); // 重新开始监控新视频 setTimeout(() => { currentVideoEnded = false; isSwitching = false; monitorVideoPlayback(); console.log('🔁 新视频监控已启动'); }, 5000); }, 2000); }, 1000); } // 3. 自动通过认真度检查 function monitorEarnestCheck() { // 清除旧的检查间隔 if (checkInterval) { clearInterval(checkInterval); } checkInterval = setInterval(() => { const checkBox = document.querySelector('.video_earnest_check_box-D3ptB'); const checkBtn = document.querySelector('.btn-DOCWn'); if (checkBox) { console.log('✅ 检测到认真度检查框'); } if (checkBtn) { console.log('🎯 找到通过按钮,正在自动点击...'); checkBtn.click(); console.log('👍 已点击通过按钮'); clearInterval(checkInterval); } }, 1000); } // 辅助函数:格式化时间 function formatTime(seconds) { const mins = Math.floor(seconds / 60); const secs = Math.floor(seconds % 60); return `${mins}:${secs.toString().padStart(2, '0')}`; } // 4. 初始化函数 function initAutoPlay() { console.log('🚀 初始化自动播放功能...'); // 开始监控视频播放 monitorVideoPlayback(); // 开始监控认真度检查 monitorEarnestCheck(); // 添加全局样式 const style = document.createElement('style'); style.textContent = ` .video_earnest_check_box-D3ptB { display: none !important; } .earnest_check_tip-hAMr7 { display: none !important; } `; document.head.appendChild(style); // 添加键盘快捷键 document.addEventListener('keydown', function(e) { // Ctrl+Alt+N: 手动触发下一个视频 if (e.ctrlKey && e.altKey && e.key === 'N') { console.log('⌨️ 手动触发播放下一个视频'); playNextVideo(); } // Ctrl+Alt+R: 重新加载监控 if (e.ctrlKey && e.altKey && e.key === 'R') { console.log('🔄 手动重新加载视频监控'); monitorVideoPlayback(); } }); console.log('🎮 快捷键已启用: Ctrl+Alt+N = 下一个视频, Ctrl+Alt+R = 重新加载监控'); } // 页面加载完成后初始化 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initAutoPlay); } else { setTimeout(initAutoPlay, 2000); } // 监听DOM变化(应对动态加载) if (observer) { observer.disconnect(); } observer = new MutationObserver(function(mutations) { mutations.forEach(mutation => { if (mutation.addedNodes.length) { const checkBtn = document.querySelector('.btn-DOCWn'); if (checkBtn) { console.log('🔍 通过DOM变化检测到认真度检查按钮'); checkBtn.click(); } // 检查是否有新的视频元素加载 const videoElement = document.querySelector('video'); if (videoElement && !videoElement.hasListener) { console.log('🆕 检测到新视频元素,重新绑定监听'); videoElement.hasListener = true; monitorVideoPlayback(); } } }); }); observer.observe(document.body, { childList: true, subtree: true }); // 清理函数 window.addEventListener('beforeunload', function() { if (checkInterval) clearInterval(checkInterval); if (observer) observer.disconnect(); }); })();