timer

for q11e

// ==UserScript==
// @name         timer
// @namespace    http://sugarblack.top
// @version      1.1.0
// @description  for q11e
// @author       zemelee
// @license      MIT
// @match        http://sugarblack.top/*
// ==/UserScript==
 


async function oneTime(count) {
    let homeBtn = document.querySelector("#home-btn");
    homeBtn.click()
    await new Promise((resolve) => { setTimeout(resolve, 1000); });
    let inputEl = document.querySelector("#submit-number")
    inputEl.value = count
    const inputEvent = new Event('input', { bubbles: true });
    inputEl.dispatchEvent(inputEvent);
    await new Promise((resolve) => { setTimeout(resolve, 500); });
    let submitBtn = document.querySelector("#submit-btn");
    submitBtn.click()
    await new Promise((resolve) => { setTimeout(resolve, 1000); });
    // const buttons = document.querySelectorAll('button');
    // const confirmBtn = Array.from(buttons).filter(button => button.innerText.trim() === '确认');
    // confirmBtn[0].click()
    let confirmBtn = document.querySelectorAll(".el-message-box>.el-message-box__btns>button")
    confirmBtn[0].click()


}
 
function showMessage(text, delay) {
    let messageBox = document.createElement('div');
    messageBox.textContent = text;
    messageBox.style.cssText = `
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translateX(-50%);
        background-color: rgba(0, 0, 0, 0.8);
        color: white;
        padding: 10px 20px;
        border-radius: 5px;
        z-index: 9999;
    `;
    document.body.appendChild(messageBox);
    setTimeout(() => {
        document.body.removeChild(messageBox);
        messageBox = null;
    }, delay); // 4 seconds
}

function validate(inputs) {
    let inputNum = inputs[0]
    let minInterval = inputs[1]
    let maxInterval = inputs[2]
    let inputFor = inputs[3]

    if (!inputNum.value || !minInterval.value || !maxInterval.value || !inputFor.value) {
        showMessage("minInterval maxInterval inputNum cycles need to be filled in completely", 3500)
        return false
    }
    if (inputNum.value >= 10 || inputNum.value < 1) {
        showMessage("输入数量必须大于1、小于10", 3500)
        return false
    }
    if (minInterval.value >= maxInterval.value) {
        showMessage("最小间隔必须小于最大间隔时长!", 3500)
        return false
    }
    if (minInterval.value < 10) {
        showMessage("最小间隔必须大于10s!", 3500)
        return false
    } 

    if (inputFor.value > 150 || inputFor.value < 1) {
        showMessage("循环次数介于[1, 150]之间!", 3500)
        return false
    }
    return true
}
 
async function executeRepeatedly(minDelay, maxDelay, forTime, singleCnt) {
    let count = 0;
    async function execute() {
        if (count < forTime) {
            const delay = Math.floor(Math.random() * (maxDelay - minDelay + 1)) + minDelay;
            showMessage(`Current cycle: ${count + 1}, Delay: ${delay}s`, 5000);
            await oneTime(singleCnt);
            count++;
            setTimeout(execute, delay * 1000);
        }
    }

    await execute();
    window.location.replace("http://sugarblack.top/#/home/params");
}


 
(async function () {
    'use strict';
    
    let singleCnt = localStorage.getItem("singleCnt") || 1;
    let minInterval = localStorage.getItem("minInterval") || 10;
    let maxInterval = localStorage.getItem("maxInterval") || 30;
    let forTime = localStorage.getItem("forTime") || 5;
    await new Promise((resolve) => { setTimeout(resolve, 1000); });
    const btns = document.querySelector(".btns")
    console.log(111, btns)
    btns.appendChild(document.createElement("br"))

    const label1 = document.createElement('label');
    const label2 = document.createElement('label');
    const label3 = document.createElement('label');
    const label4 = document.createElement('label');

    label1.textContent = "每次提交数量(建议1)";
    label2.textContent = "最小间隔(s)";
    label3.textContent = "最大间隔(s)";
    label4.textContent = "循环次数";

    let inputNum = document.createElement("input")
    let inputMinInterval = document.createElement("input")
    let inputMaxInterval = document.createElement("input")
    let inputFor = document.createElement("input")

    inputNum.placeholder = "inputNum";
    inputMinInterval.placeholder = "Min Interval (s)";
    inputMaxInterval.placeholder = "Max Interval (s)";
    inputFor.placeholder = "Number of cycles";

    if (singleCnt && minInterval && maxInterval && forTime) {
        inputNum.value = singleCnt;
        inputMinInterval.value = minInterval;
        inputMaxInterval.value = maxInterval;
        inputFor.value = forTime;
    }

    let inputs = [inputNum, inputMinInterval, inputMaxInterval, inputFor];
    let labels = [label1, label2, label3, label4];

    inputs.forEach((item, index) => {
        item.style.marginLeft = "6px";
        item.style.marginRight = "20px";
        item.style.width = "50px";
        item.type = "number";
        btns.appendChild(labels[index]);
        btns.appendChild(item);
    })

    let startBtn = document.createElement("button")
    startBtn.textContent = "start"
    startBtn.style.marginLeft = "10px";
    startBtn.addEventListener("click", function () {

        if (!validate(inputs)) return

        singleCnt = inputNum.value;
        const newMinInterval = inputMinInterval.value;
        const newMaxInterval = inputMaxInterval.value;
        forTime = inputFor.value;

        localStorage.setItem("singleCnt", singleCnt)
        localStorage.setItem("minInterval", newMinInterval)
        localStorage.setItem("maxInterval", newMaxInterval)
        localStorage.setItem("forTime", forTime)

        executeRepeatedly(+newMinInterval, +newMaxInterval, +forTime, +singleCnt)
    })
    btns.appendChild(startBtn)
 
 
})();