您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
本脚本仅供学习和交流使用,不得用于任何违反法律法规或侵犯他人权益的行为。用户在使用本脚本时应自行承担责任,并遵守当地法律法规。若因使用本脚本导致任何违法违规行为,与本作者无关。
// ==UserScript== // @name 再教育公开课视频自动答题和进度完成后自动播放下一个 // @namespace http://tampermonkey.net/ // @version v1.0.9 // @description 本脚本仅供学习和交流使用,不得用于任何违反法律法规或侵犯他人权益的行为。用户在使用本脚本时应自行承担责任,并遵守当地法律法规。若因使用本脚本导致任何违法违规行为,与本作者无关。 // @author You // @match https://ggfw.hrss.gd.gov.cn/zxpx/auc/play/* // @icon https://www.google.com/s2/favicons?sz=64&domain=gd.gov.cn // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Your code here... // 是否在处理事务中,true 则跳过一个定时区间 let isHandling = false // 目前选择的单选框值 let curRadioValue = '1' // 定时器 let interval // 是否本视频已经答题成功 let answeredSuccessfully = false function checkVideoStatus() { // 检查视频是否已经开始播放 var video = document.querySelector("video"); if (video && video.paused) { //静音 p.tag.muted = true; if (p.paused()) { p.play() } console.log("视频已开始播放。"); } } function checkVideoTimeAndUpdate() { const learnPercentEle = document.getElementsByClassName('learnpercent') if(learnPercentEle[0].innerText.includes('已完成')) { console.log('本小结视频已经学习完成') // 查找所有<span class="content-unstart">未开始</span>标签 var unstartTags = document.getElementsByClassName("content-unstart"); // 如果存在未开始标签,点击第一个标签,并打印出过程 if (unstartTags.length > 0) { var firstUnstartTag = unstartTags[0]; isHandling = true firstUnstartTag.click(); console.log("已点击第一个未开始标签。"); // 给个延迟时间,让新的视频加载 setTimeout(() => { // 开始新视频直接重新加载,避免有干扰 clearInterval(interval); document.location.reload() }, 6000) } else { console.log("未找到未开始标签。可能学习已经全部完成,清除定时器"); clearInterval(interval); } } else { console.log("正在学习的内容尚未达到100。"); } } // 定义函数以点击单选按钮和确认按钮 function clickRadioButton(value) { var radioButton = document.querySelector('input[type="radio"][name="panduan"][value="' + value + '"]'); if (radioButton) { radioButton.click(); console.log("已点击单选按钮,值为:" + value); } else { console.error("找不到指定的单选按钮。"); } } function clickConfirmButton() { var confirmButton = document.querySelector('.reply-sub'); // 这里是主弹窗的确认按钮 if (confirmButton) { confirmButton.click(); console.log("已点击主弹窗确认按钮。"); } else { console.error("找不到主弹窗确认按钮。"); } } function clickConfirmButtonInPopup() { var confirmButtonInPopup = document.querySelector('.l-btn-text'); // 这里是二层弹窗的确认按钮 if (confirmButtonInPopup) { confirmButtonInPopup.click(); console.log("已点击二层弹窗确认按钮。"); } else { console.error("找不到二层弹窗的确认按钮。"); } } // 定义一个方法来获取指定类名元素的文本内容 function getSecondPopupText() { // 获取包含答案错误信息的元素 var messageElement = document.querySelector('.messager-body.panel-body.panel-body-noborder.window-body'); // 如果找到了包含答案错误信息的元素 if (messageElement) { // 获取答案文本内容 var errorMessage = messageElement.innerText.trim(); console.log("二级弹窗信息为:", errorMessage); return errorMessage } else { console.error("找不到包含答案错误信息的元素。"); return null } } // 定义一个函数以检测弹窗是否出现,如果出现则点击单选按钮和确认按钮 function checkPopupStatusAndClick() { // 二层弹窗,在答题正确、错误之后出现 var anotherPopup = document.querySelector('.panel.window.messager-window'); // 另一个弹窗 if (anotherPopup) { console.warn('二层弹窗出现') isHandling = true const message = getSecondPopupText() if(message.includes('检测到您当前网络不稳定,现学习计时已停止')) { console.log('被检测啦,收皮啦') clearInterval(interval); return } if (message.includes('答案正确')) { // 每个视频应该只会有一条问题,答案正确的话就设置答题完成,之后定时器就不会再检测弹窗 console.log("已经答题成功。"); answeredSuccessfully = true setTimeout(() => { // 答题成功后隔几秒上答题上传到服务器,之后刷新页面,让dom里的弹窗恢复,方便有第二个问题的出现无法检测 document.location.reload() }, 6000) } else { // 如果弹窗文本不包含答案正确,则设置单选按钮值为另一个按钮 curRadioValue = curRadioValue === '1' ? '0' : '1' console.log('重新设置单选框的值') } // 点击确认按钮 clickConfirmButtonInPopup(); // 设置延迟,让网站接口检验答案 setTimeout(() => isHandling = false, 5000) return; } // 答题的弹窗 var mainPopup = document.querySelector('.panel.window'); // 主弹窗 if (mainPopup) { isHandling = true console.warn('答题的弹窗出现') // 如果主弹窗出现,则选择一个单选按钮并点击确认按钮 clickRadioButton(curRadioValue); // 假设第一个单选按钮的值是1 clickConfirmButton(); // 设置延迟,让网站接口检验答案 setTimeout(() => isHandling = false, 5000) } } // 每隔一段时间检测是否有弹窗出现 interval = setInterval(function () { if (isHandling) { console.log('正在处理事务,跳过这次定时任务') return } if(!answeredSuccessfully) { console.log("正在检测是否有弹窗出现..."); checkPopupStatusAndClick(); } checkVideoTimeAndUpdate(); checkVideoStatus(); }, 5000); // 每5秒检测一次 })();