您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
NexusPHP魔力自动兑换上传,下载,签到卡等
// ==UserScript== // @name 自动魔力兑换上传下载签到卡等 // @namespace http://tampermonkey.net/ // @version 1.0.3 // @description NexusPHP魔力自动兑换上传,下载,签到卡等 // @author shareit // @include https://*/mybonus.php* // @include http://*/mybonus.php* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // 提取带有 <tr><form action="?action=exchange" method="post"> 的父节点 const forms = Array.from(document.querySelectorAll('tr form[action="?action=exchange"]')); if (forms.length === 0) { console.log("没有找到符合条件的节点!"); return; } let exchangeConfigStr = localStorage.getItem("exchange_config_json"); let map; try { const parsedData = JSON.parse(exchangeConfigStr); if (parsedData && typeof parsedData === 'object' && !Array.isArray(parsedData)) { map = new Map(Object.entries(parsedData)); // 将对象转换为 Map } } catch (error) { console.error('解析 JSON 时发生错误:', error); } // 创建选择框 const select = document.createElement('select'); select.style.color = 'red'; select.style.color = 'red'; select.style.fontSize='20px'; forms.forEach((form, index) => { const tr=form.parentNode; const h1 = tr.querySelector('td h1'); // 查找当前表单中第一个包含 h1 的 td 的内容 if (h1) { const option = document.createElement('option'); option.value = index; // 使用索引作为存储值 option.innerText = h1.innerText; select.appendChild(option); //console.log("option->"+option.innerText); }else{ } }); // 创建延时输入框 const delayInput = document.createElement('input'); delayInput.type = 'number'; delayInput.placeholder = '延时(s)'; delayInput.style.marginLeft = '10px'; delayInput.min = 0; delayInput.value = 11; delayInput.style.color = 'red'; delayInput.style.fontSize='20px'; // 创建延时标注 const delayLabel = document.createElement('span'); delayLabel.innerText = '秒延时, 兑换'; // 添加单位和说明 delayLabel.style.marginLeft = '5px'; // 加一点间距 delayLabel.style.color = 'red'; delayLabel.style.fontSize='20px'; // 创建重复次数输入框 const repeatInput = document.createElement('input'); repeatInput.type = 'number'; repeatInput.value = 2; repeatInput.placeholder = '重复次数'; repeatInput.style.marginLeft = '10px'; repeatInput.min = 1; repeatInput.style.color = 'red'; repeatInput.style.fontSize='20px'; // 创建重复次数标注 const repeatLabel = document.createElement('span'); repeatLabel.innerText = '次,'; // 添加说明 repeatLabel.style.marginLeft = '5px'; // 加一点间距 repeatLabel.style.color = 'red'; repeatLabel.style.fontSize='20px'; // 创建提交按钮 const submitButton = document.createElement('button'); submitButton.innerText = '提交'; submitButton.style.marginLeft = '10px'; submitButton.style.color = 'red'; submitButton.style.fontSize='20px'; // 创建倒计时显示区域 const countdownDisplay = document.createElement('span'); countdownDisplay.style.color = 'red'; // 设置文字颜色为红色 countdownDisplay.style.marginTop = '10px'; // 设置一些上边距 countdownDisplay.style.fontSize='24px'; countdownDisplay.innerText = ''; // 初始化为空 if(exchangeConfigStr){ if(map){ const repeatTimes = map.get("repeatTimes"); const delaySeconds = map.get("delaySeconds"); const selectedValue = map.get("selectedValue"); //console.log("缓存:"+repeatTimes,delaySeconds,selectedValue) repeatInput.value = repeatTimes; delayInput.value = delaySeconds; for (let option of select.options) { if (option.value === selectedValue) { // 比较时注意值类型 option.selected = true; // 设置该选项为选中 break; // 找到后退出循环 } } if(repeatTimes>0){ //console.log(delaySeconds+" s后执行点击,剩余次数:"+(repeatTimes)); // 倒计时 let countdown = delaySeconds; countdownDisplay.innerText = `倒计时: ${countdown} 秒`; const countdownInterval = setInterval(() => { countdown--; countdownDisplay.innerText = `倒计时: ${countdown} 秒`; if (countdown < 0) { clearInterval(countdownInterval); countdownDisplay.innerText = ''; } }, 1000); // 每秒更新一次 setTimeout(() => {submitButton.click();},delaySeconds*1000); } } } // 将元素添加到每个表单的父 <table> 的上面 const parentTable = forms[0].closest('table'); if (parentTable) { parentTable.parentNode.insertBefore(select, parentTable); parentTable.parentNode.insertBefore(delayInput, parentTable); parentTable.parentNode.insertBefore(delayLabel, parentTable); // 插入延时说明 parentTable.parentNode.insertBefore(repeatInput, parentTable); parentTable.parentNode.insertBefore(repeatLabel, parentTable); // 插入重复次数说明 parentTable.parentNode.insertBefore(submitButton, parentTable); parentTable.parentNode.insertBefore(countdownDisplay, parentTable); } // 点击提交按钮时的行为 submitButton.addEventListener('click', () => { const selectedIndex = select.value; // 获取下拉选中的索引 const delay = parseInt(delayInput.value) * 1000; // 转换为毫秒 const repeatCount = parseInt(repeatInput.value); if (isNaN(delay) || isNaN(repeatCount) || repeatCount <= 0) { alert("请填写有效的延时和重复次数!"); return; } const form = forms[selectedIndex]; // 直接获取所选表单 //console.log(form.parentNode); if (form) { const submit = form.parentNode.querySelector('input[name="submit"]'); // 查找 name="submit" 的按钮 //console.log(submitButton); if (submitButton) { console.log("模拟点击"); if(!map){ map = new Map(); } map.set("repeatTimes",repeatCount-1); map.set("delaySeconds",delayInput.value); map.set("selectedValue",selectedIndex); const json = JSON.stringify( Object.fromEntries(map)); localStorage.setItem('exchange_config_json',json); //console.log(map); //console.log(json); //console.log(localStorage.getItem('exchange_config_json')); submit.click(); // 模拟点击提交按钮 //setTimeout(() => {location.reload();},5*1000); } } }); })();