您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
需要进入具体的播放页面,加载油猴,可全部完成本页视频播放。
// ==UserScript== // @name 国家中小学智慧平台快速学习2004暑假研修(快速学习) // @namespace http://tampermonkey.net/ // @version 3.7 // @author 桥风online(修改版) // @description 需要进入具体的播放页面,加载油猴,可全部完成本页视频播放。 // @match https://basic.smartedu.cn/teacherTraining/courseDetail* // @icon https://www.google.com/s2/favicons?sz=64&domain=qlteacher.com // @license 桥风online // @grant none // ==/UserScript== (function () { 'use strict'; // 拦截和修改XHR请求 function interceptXHR() { const XHR = XMLHttpRequest.prototype; const open = XHR.open; const send = XHR.send; XHR.open = function (method, url) { this._url = url; return open.apply(this, arguments); }; XHR.send = function () { this.addEventListener('load', function () { if (this._url.includes('progress') || this._url.includes('heartbeat')) { console.log('拦截:', this._url); try { const json = JSON.parse(this.responseText); json.progress = 100; json.completed = true; Object.defineProperty(this, 'responseText', { get: function () { return JSON.stringify(json); } }); } catch (e) { console.error('修改响应失败:', e); } } }); return send.apply(this, arguments); }; } // 模拟用户交互 function simulateUserInteraction(video) { if (video) { video.dispatchEvent(new MouseEvent('mousemove', { view: window, bubbles: true, cancelable: true })); video.dispatchEvent(new MouseEvent('click', { view: window, bubbles: true, cancelable: true })); } } // 更新存储 function updateStorage() { const storageKeys = ['videoProgress', 'courseProgress', 'lessonComplete']; storageKeys.forEach(key => { try { localStorage.setItem(key, '100'); sessionStorage.setItem(key, '100'); } catch (e) { console.error('更新存储失败:', e); } }); } // 跳过单个视频 function skipVideo(video) { return new Promise((resolve) => { if (video) { const button = document.querySelector('.fish-btn-primary span'); if (button && button.textContent.trim() === '我知道了') { // 如果找到了按钮,模拟点击事件 button.closest('button').click(); console.log('已点击"我知道了"按钮'); } else { console.log('未找到"我知道了"按钮'); } video.dispatchEvent(new Event('ended')); setTimeout(function () { video.muted = true; video.playbackRate = 1.2; video.play() video.play().catch(e => console.error('播放视频错误:', e)); }, 1500); simulateUserInteraction(video); updateStorage(); if (typeof window.onVideoComplete === 'function') { window.onVideoComplete(); } if (typeof window.finishLesson === 'function') { window.finishLesson(); } setTimeout(resolve, 2000); } else { resolve(); } }); } // 展开所有折叠项并点击所有资源项 async function expandAndClickAll() { // 点击顶层折叠项 const topLevelHeaders = document.querySelectorAll('.fish-collapse-item > .fish-collapse-header'); for (const header of topLevelHeaders) { if (header.getAttribute('aria-expanded') === 'false') { header.click(); await new Promise(resolve => setTimeout(resolve, 500)); } } // 点击二级折叠项 const secondLevelHeaders = document.querySelectorAll('.fish-collapse-content .fish-collapse-header'); for (const header of secondLevelHeaders) { if (header.getAttribute('aria-expanded') === 'false') { header.click(); await new Promise(resolve => setTimeout(resolve, 500)); } } } // 查找所有资源项 async function findAllResourceItems() { await expandAndClickAll(); return document.querySelectorAll('.resource-item.resource-item-train'); } // 处理所有视频 async function processAllVideos() { const resourceItems = await findAllResourceItems(); console.log(`找到的资源项总数: ${resourceItems.length}`); for (let i = 0; i < resourceItems.length; i++) { const item = resourceItems[i]; console.log(`正在处理第 ${i + 1} 项`); item.click(); await new Promise(resolve => setTimeout(resolve, 1000)); const video = document.querySelector('video'); await skipVideo(video); console.log(`完成第 ${i + 1} 项`); } console.log("所有视频已处理完毕"); } // 检查并更新按钮显示状态 function updateButtonVisibility(button) { if (!window.location.href.includes("https://basic.smartedu.cn/teacherTraining/courseDetail")) { button.style.display = 'none'; } else { button.style.display = 'block'; } } // 主函数 function main() { interceptXHR(); // 添加控制按钮 const controlButton = document.createElement('button'); controlButton.textContent = '开始处理视频'; controlButton.style.position = 'fixed'; controlButton.style.top = '10px'; controlButton.style.right = '10px'; controlButton.style.zIndex = '9999'; // 初始检查并更新按钮显示状态 updateButtonVisibility(controlButton); controlButton.addEventListener('click', () => { if (controlButton.textContent === '开始处理视频') { processAllVideos().catch(error => { console.error("发生错误:", error); }); controlButton.textContent = '停止处理'; } else { window.location.reload(); } }); document.body.appendChild(controlButton); // 监听URL变化 window.onpopstate = function () { updateButtonVisibility(controlButton); }; // 监听URL变化(包括点击返回按钮) const pushState = history.pushState; history.pushState = function () { pushState.apply(history, arguments); updateButtonVisibility(controlButton); }; } // 当页面加载完成时运行主函数 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', main); } else { main(); } })();