Greasy Fork is available in English.
每隔120~180秒自动复制其他人的回复并提交
// ==UserScript==
// @name Uooc讨论区自动回复提交
// @namespace https://github.com/index-null
// @version 4.12
// @description 每隔120~180秒自动复制其他人的回复并提交
// @author Chuhsing
// @Dedicated_to 小黃鱼
// @match *://uooc.net.cn/*
// @match http://uooc.net.cn/*
// @match https://www.uooc.net.cn/*
// @license MIT
// ==/UserScript==
(function() {
'use strict';
console.log("脚本已加载");
console.log("Author: Chuhsing");
console.log("Dedicated_to 小黃鱼");
// 设置延时
const minInterval = 120000; // 最小延时 120 秒
const maxInterval = 180000; // 最大延时 180 秒
const waitTime = 5000; // 等待页面加载时间,电脑性能较差可以适当延长
let curData = '';
// 等待10秒后尝试获取DOM元素
setTimeout(() => {
if (checkElements()) {
// 获取DOM元素
// 定义要提交的内容
let testData = getReplys();
const textarea = document.querySelector('.replay-editor textarea[ng-model="content"]');
const replyButton = document.querySelector('.replay-editor .replay-editor-btn[ng-click="handelReplay()"]');
// 第一次提交
curData = getRandomElement(testData);
updateTextAreaAndSubmit(textarea, replyButton, curData);
console.log(`已完成首次提交,内容: ${curData}`);
console.log(`开始自动提交,每${minInterval/1000} - ${maxInterval/1000}秒随机提交一次...`);
// // 固定定时器
// const interval = 120000; // 120秒
// let submitTimerId = setInterval(() => {
// // 更新textarea并提交
// curData = getRandomElement(testData);
// updateTextAreaAndSubmit(textarea, replyButton, curData);
// console.log(`已提交内容: ${curData}`);
// }, interval);
// 随机定时器
let submitTimerId = setInterval(() => {
// 更新textarea并提交
const curData = getRandomElement(testData);
updateTextAreaAndSubmit(textarea, replyButton, curData);
console.log(`已提交内容: ${curData}`);
// 重新设置随机延时
clearInterval(submitTimerId);
submitTimerId = setInterval(() => {
// 更新textarea并提交
const curData = getRandomElement(testData);
updateTextAreaAndSubmit(textarea, replyButton, curData);
console.log(`已提交内容: ${curData}`);
}, getRandomInterval(minInterval, maxInterval));
}, getRandomInterval(minInterval, maxInterval));
}
}, waitTime);
// 更新textarea并提交
function updateTextAreaAndSubmit(textarea, button, content) {
if (!button.disabled) {
// 获取当前作用域
const scope = angular.element(textarea).scope();
// 更新模型
scope.$apply(() => {
scope.content = content;
});
// 触发按钮点击事件
angular.element(button).triggerHandler('click');
} else {
console.log("按钮被禁用,无法点击");
}
}
function checkElements() {
console.log("检查元素是否已加载...");
// 获取textarea元素
const textarea = document.querySelector('.replay-editor textarea[ng-model="content"]');
if (!textarea) {
console.log("未找到textarea元素,5秒后重试...");
return false;
} else {
console.log("已找到textarea元素,继续检查...");
}
// 获取回复按钮
const replyButton = document.querySelector('.replay-editor .replay-editor-btn[ng-click="handelReplay()"]');
if (!replyButton) {
console.log("未找到回复按钮,5秒后重试...");
return false;
} else {
console.log("已找到回复按钮,继续检查...");
}
// 如果找到了元素,则设置标志变量并返回true
console.log("元素均找到,开始自动提交...");
return true;
}
function getReplys() {
const replyContents = document.querySelectorAll('.Reply-item .Reply-item-content');
// 创建一个空数组来存储内容
let contentList = [];
// 遍历所有元素并将内容添加到数组中
replyContents.forEach(content => {
contentList.push(content.textContent.trim());
});
// 输出内容列表
console.log(contentList);
return contentList;
}
function getRandomElement(array) {
if (array.length === 0) {
throw new Error("数组为空,无法选择元素");
}
// 生成一个随机索引
const randomIndex = Math.floor(Math.random() * array.length);
// 返回随机索引对应的元素
return array[randomIndex];
}
// 生成随机延时
function getRandomInterval(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
})();