您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
陕西省高校教师岗前培训暨教师资格教育基础理论知识培训,自动查找并点击“未达标”课程中的“前往学习”链接,直到所有课程达标。
// ==UserScript== // @name Shanxi GSPX Online Auto-click Unlearned // @namespace http://tampermonkey.net/ // @version 6.3 // @description 陕西省高校教师岗前培训暨教师资格教育基础理论知识培训,自动查找并点击“未达标”课程中的“前往学习”链接,直到所有课程达标。 // @author 大老粗 // @match http://shanxigs.gspxonline.com/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; const WAIT_TIME = 10000; // 通用等待时间 const LONG_WAIT_TIME = 18000000; // 5小时的等待时间 // 创建状态窗口 function createStatusWindow() { const statusDiv = document.createElement('div'); statusDiv.id = 'scriptStatusWindow'; statusDiv.style.cssText = ` position: fixed; top: 10px; right: 10px; width: 250px; height: 150px; background-color: rgba(0, 0, 0, 0.8); color: white; font-size: 14px; padding: 10px; z-index: 9999; border-radius: 8px; text-align: left; `; statusDiv.innerHTML = `<strong>脚本运行状态</strong><br>初始化...`; document.body.appendChild(statusDiv); } // 更新状态窗口的内容 function updateStatus(message) { const statusDiv = document.getElementById('scriptStatusWindow'); if (statusDiv) { statusDiv.innerHTML = `<strong>脚本运行状态</strong><br>${message}`; } } // 处理弹出窗口 async function handlePopup() { updateStatus('正在处理弹出窗口...'); const confirmButton = document.querySelector('button[data-bb-handler="success"]'); if (confirmButton) { confirmButton.click(); updateStatus('已点击确认按钮,页面加载中...'); await new Promise(resolve => setTimeout(resolve, WAIT_TIME)); } } // 查找并点击未达标课程 async function clickUnqualifiedCourse() { updateStatus('正在查找 "未达标" 的课程...'); // 查找包含“未达标”文本的 <tr> 行 const unqualifiedCourses = Array.from(document.querySelectorAll('tr')) .filter(row => row.textContent.includes('未达标')); updateStatus(`找到 "未达标" 的课程数量: ${unqualifiedCourses.length}`); if (unqualifiedCourses.length > 0) { const firstCourse = unqualifiedCourses[0]; // 查找包含 "前往学习" 的 <a> 链接 const studyLink = firstCourse.querySelector('a.btn.btn-primary'); if (studyLink) { updateStatus('找到 "前往学习" 链接,正在模拟点击...'); // 手动触发鼠标点击事件 simulateClick(studyLink); await new Promise(resolve => setTimeout(resolve, LONG_WAIT_TIME)); await handlePopup(); // 刷新前再次处理弹出窗口 location.reload(); return true; } else { updateStatus('未找到 "前往学习" 链接。'); } } else { updateStatus('未找到 "未达标" 的课程。'); } return false; } // 模拟点击函数,创建鼠标事件 function simulateClick(element) { const rect = element.getBoundingClientRect(); const clickEvent = new MouseEvent('click', { view: window, bubbles: true, cancelable: true, clientX: rect.left + rect.width / 2, clientY: rect.top + rect.height / 2 }); element.dispatchEvent(clickEvent); // 触发点击事件 console.log('模拟点击已发送至元素:', element); } // 主程序 async function main() { createStatusWindow(); while (true) { const isUnqualified = await clickUnqualifiedCourse(); if (!isUnqualified) { updateStatus('所有课程已达标或未找到未达标课程。'); break; } await handlePopup(); // 处理可能出现的弹出窗口 } } window.addEventListener('load', main); })();