// ==UserScript== // @name [25-04-15] 青书学堂自动看课 // @namespace http://tampermonkey.net/ // @version 0.6 // @description 检测网页视频自动播放并设置0.5倍速,播放完毕后自动下一节课.有问题提Issue,时不时看到会修 // @author Hu5 // @run-at document-start // @no_frames true // @match *://*.qingshuxuetang.com/* // @downloadURL none // ==/UserScript== (function() { 'use strict'; async function main() { console.log(`开始看课`) // 获取所有课程ID const kcjsIds = (function() { const allElements = document.querySelectorAll('*'); const matchingIds = []; for (let i = 0; i < allElements.length; i++) { const element = allElements[i]; if (element.id && element.id.startsWith("courseware-kcjs_")) { matchingIds.push(element.id.replace("courseware-", "")); } } return matchingIds; } )() const observer = new MutationObserver(async (mutationsList, observer) => { for (const mutation of mutationsList) { if (mutation.type === 'childList') { let videoElm = mutation.target.querySelector('video') if (videoElm) { videoElm.autoplay=true // 慢倍速播放凑时长 videoElm.playbackRate = 0.5; // 静音 videoElm.muted = "muted"; // 开始播放 videoElm.play(); uploadStudyRecordBegin(nodeId) // 看完自动下一课 videoElm.onended = () => { // 解析当前的课程ID const nodeId = (new URL(document.URL)).searchParams.get("nodeId") // 下一节课的ID const nextNodeId = kcjsIds[kcjsIds.indexOf(nodeId) + 1] // 如果还有下一节课,继续看 if (nextNodeId) { // 下一节课 CoursewareNodesManager.onMenuClick(nextNodeId) } else { // 没有就是看完了,不再继续 console.log('看完了,不再继续'); } } // 找到关闭监视 return observer.disconnect() } } } } ) observer.observe(document.querySelector("#playerContainer"), { childList: true, subtree: true }); } window.onload = main; } )();