您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
党旗飘飘学习助手,自动刷课,跳转控制,JLU
当前为
// ==UserScript== // @name 积极分子在线培训助手 // @namespace http://tampermonkey.net/ // @version 1.0 // @description 党旗飘飘学习助手,自动刷课,跳转控制,JLU // @author bugo // @match *://*/jjfz/play* // @match *://*/*/jjfz/play* // @icon data:image/png;base64,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 // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @grant GM_notification // @run-at document-start // @license MIT // ==/UserScript== (function() { 'use strict'; console.log("积极分子在线培训助手已加载"); // 工具函数 const utils = { getVideo: () => document.querySelector("video"), getRid: () => { const html = document.documentElement.innerHTML; const match = html.match(/rid[\s:="']*(\d+)["'\s]/); return match ? match[1] : null; }, // 清除所有定时器 clearAllTimers: () => { // 清除原页面定时器 clearInterval(window.timer); window.clearInterval(window.loop_flag); window.clearInterval(window.flag); // 清除我们自己的定时器 if (window.autoInterval) { clearInterval(window.autoInterval); window.autoInterval = null; } }, // 处理各种弹窗,包括继续观看和关闭 handleDialogs: () => { // .public_close .public_cancel .public_submit public_cont1这三种按钮 并且要判断内容 document.querySelectorAll(".public_close, .public_cancel, .public_submit, .public_cont1").forEach(btn => { if (btn) { // 继续观看 、我知道了 、继续 if (btn.textContent?.includes("继续观看") || btn.textContent?.includes("我知道了") || btn.textContent?.includes("继续")) { btn.click(); } } }); } }; // 防止页面切换时暂停 const originAddListener = Document.prototype.addEventListener; Document.prototype.addEventListener = function(type, listener, options) { if (type === "visibilitychange") return; return originAddListener.call(this, type, listener, options); }; Object.defineProperty(document, 'hidden', { configurable: true, get: () => false }); Object.defineProperty(document, 'visibilityState', { configurable: true, get: () => 'visible' }); // 添加样式 GM_addStyle(` .jjfz-helper-panel { position: fixed; top: 110px; left: 10px; background: #fff; border-radius: 0 0 4px 4px; box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.2); z-index: 9999; padding: 12px; width: 280px; font-size: 14px; margin-top: -1px; } .jjfz-helper-panel h3 { margin: 0 0 12px 0; padding-bottom: 8px; border-bottom: 1px solid #eee; text-align: center; font-size: 16px; color: #e61d1d; } .jjfz-helper-option { margin-bottom: 10px; } .jjfz-helper-option label { display: block; margin-bottom: 5px; font-weight: bold; } .checkbox-wrapper { display: flex; align-items: center; margin: 5px 0; } .checkbox-wrapper input[type="checkbox"] { width: auto; margin: 0; cursor: pointer; } .jjfz-helper-panel select, .jjfz-helper-panel input, .jjfz-helper-panel button { width: 100%; padding: 6px; border: 1px solid #ddd; border-radius: 3px; margin-bottom: 6px; cursor: pointer; } .jjfz-helper-panel select, .jjfz-helper-panel input[type="text"] { cursor: auto; } .jjfz-helper-panel button { background: #2196F3; color: white; border: none; font-weight: bold; } .jjfz-helper-panel button:hover { background: #1976D2; } .jjfz-helper-panel button.stop { background: #F44336; } .jjfz-helper-panel button.stop:hover { background: #D32F2F; } .jjfz-helper-toggle { position: fixed; top: 80px; left: 10px; background: #2196F3; color: white; border: none; border-radius: 4px; padding: 6px 12px; cursor: pointer; z-index: 10000; font-weight: bold; width: 80px; box-shadow: 0 -2px 5px rgba(0, 0, 0, 0.05); } .jjfz-helper-toggle.expanded { border-radius: 4px 4px 0 0; } .jjfz-helper-toggle:hover { background: #1976D2; } `); // 设置 const settings = { autoPlay: GM_getValue('autoPlay', true), autoNext: true, panelExpanded: GM_getValue('panelExpanded', true), // 保存设置 save: function() { Object.keys(this).forEach(key => { if (typeof this[key] !== 'function' && key !== 'autoNext') { GM_setValue(key, this[key]); } }); } }; // 核心功能 const core = { // 添加学习时长 - 参数为要添加的秒数 addStudyTime: (seconds) => { const rid = utils.getRid(); const video = utils.getVideo(); if (!video || !rid || seconds <= 0) return false; // 计算目标时间 const currentTime = video.currentTime || 0; const duration = video.duration || 600; // 减少2秒,等待网址自动上报完成事件 const targetTime = Math.min(duration-2, currentTime + seconds); // 发送请求并设置视频时间 let success = false; $.ajax({ type: "POST", cache: false, dataType: "json", url: "/jjfz/lesson/current_time", data: { rid: rid, time: targetTime, _xsrf: $(":input[name='_xsrf']").val() }, async: false, success: function(data) { if (data && data.code === 1) { try { video.currentTime = targetTime; success = true; } catch (e) { success = false; } } else { success = false; } }, error: function() { success = false; } }); return success; }, // 自动播放下一集 playNextVideo: () => { const current = document.querySelector('.video_red1')?.closest('li'); const next = current?.nextElementSibling; if (next && next.querySelector('a')) { next.querySelector('a').click(); return true; } else { GM_notification({ text: '✅ 本章播放完成,跳转课程列表页~', timeout: 4000 }); location.href = `${location.protocol}//${location.host}/jjfz/lesson`; return false; } }, // 处理视频结束事件 handleVideoEnded: () => { utils.clearAllTimers(); if (settings.autoNext) { // 等待2秒,确保视频结束事件触发 setTimeout(core.playNextVideo, 2000); } }, // 启动自动学习 startAutoLearning: () => { if (!settings.autoPlay || window.autoInterval) return; // 处理弹窗 utils.handleDialogs(); // 监听视频结束事件 const video = utils.getVideo(); if (video && !video.hasEndedListener) { video.addEventListener('ended', function() { console.log("视频播放结束"); core.handleVideoEnded(); }); video.hasEndedListener = true; } // 启动定时器 window.autoInterval = setInterval(() => { const video = utils.getVideo(); if (!video) return; // 尝试点击播放按钮 if (video.paused) { const playButton = document.querySelector('.plyr__controls [data-plyr="play"], .plyr__play-large, [aria-label="播放"]'); if (playButton) { playButton.click(); } else { // 触发点击事件 video.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); } video.play(); } // 自动处理弹窗 utils.handleDialogs(); // 更新界面 ui.update(); // 检测视频是否接近结束但尚未触发ended事件 if (video.currentTime > video.duration * 0.98 && !video.ended) { video.currentTime = video.duration; // 强制跳到结尾触发ended事件 } }, 1500); } }; // UI 相关功能 const ui = { create: () => { // 创建切换按钮 const toggleButton = document.createElement('button'); toggleButton.className = 'jjfz-helper-toggle' + (settings.panelExpanded ? ' expanded' : ''); toggleButton.textContent = settings.panelExpanded ? '收起' : '展开'; toggleButton.onclick = function() { const panel = document.querySelector('.jjfz-helper-panel'); settings.panelExpanded = !settings.panelExpanded; panel.style.display = settings.panelExpanded ? 'block' : 'none'; this.textContent = settings.panelExpanded ? '收起' : '展开'; // 根据展开状态更新按钮样式 this.classList.toggle('expanded', settings.panelExpanded); settings.save(); }; document.body.appendChild(toggleButton); // 创建控制面板 const panel = document.createElement('div'); panel.className = 'jjfz-helper-panel'; panel.style.display = settings.panelExpanded ? 'block' : 'none'; panel.innerHTML = ` <h3>积极分子培训助手 - JLU</h3> <div class="jjfz-helper-option"> <button id="jjfz-toggle-auto" class="${settings.autoPlay ? 'stop' : ''}">${settings.autoPlay ? '⏸️ 暂停刷课' : '▶️ 开始刷课'}</button> </div> <div class="jjfz-helper-option"> <label>跳转控制</label> <div style="display:flex;gap:5px;"> <input type="number" id="jjfz-jump-time" value="30" min="1" max="3600" style="flex:2;"> <button id="jjfz-jump-btn" style="flex:1;">快进(秒)⏩</button> </div> </div> <div class="jjfz-helper-status"> <p>当前视频: <span id="jjfz-current-video">获取中...</span></p> <p>学习进度: <span id="jjfz-progress">0/0</span></p> </div> `; document.body.appendChild(panel); // 添加事件监听 ui.setupEventListeners(); }, // 设置事件监听 setupEventListeners: () => { document.getElementById('jjfz-toggle-auto').addEventListener('click', function() { settings.autoPlay = !settings.autoPlay; this.textContent = settings.autoPlay ? '⏸️ 暂停刷课' : '▶️ 开始刷课'; this.className = settings.autoPlay ? 'stop' : ''; settings.save(); if (settings.autoPlay) { core.startAutoLearning(); } else { utils.clearAllTimers(); } }); document.getElementById('jjfz-jump-btn').addEventListener('click', function() { const seconds = parseInt(document.getElementById('jjfz-jump-time').value) || 30; core.addStudyTime(seconds); // 快进 }); }, // 更新UI update: () => { const video = utils.getVideo(); if (!video) return; // 更新当前视频信息 const videoTitle = document.querySelector('.video_red1 a')?.textContent.trim() || "未知"; const currentVideoEl = document.getElementById('jjfz-current-video'); if (currentVideoEl) { currentVideoEl.textContent = videoTitle; } // 更新课程进度 const total = document.querySelectorAll('.video_lists ul li').length; const current = Array.from(document.querySelectorAll('.video_lists ul li')).findIndex(li => li.classList.contains('video_red1')) + 1; const progressEl = document.getElementById('jjfz-progress'); if (progressEl) { progressEl.textContent = `${current}/${total}`; } } }; // 主函数 function main() { // 创建UI ui.create(); // 监听视频加载 let checkCount = 0; const videoCheckInterval = setInterval(() => { const video = utils.getVideo(); checkCount++; if (video) { clearInterval(videoCheckInterval); // 监听播放进度 video.addEventListener('timeupdate', ui.update); // 自动学习模式 if (settings.autoPlay) { core.startAutoLearning(); } ui.update(); } else if (checkCount > 20) { // 20秒后仍未找到视频,停止检查 clearInterval(videoCheckInterval); console.log("未能找到视频元素"); } }, 1000); } // 启动脚本 main(); })();