szhn / Автоклик по кнопкам "Запустить" с задержкой

// ==UserScript==
// @name         Автоклик по кнопкам "Запустить" с задержкой
// @namespace    http://tampermonkey.net/
// @version      1.5
// @description  Находит и кликает по каждой кнопке с текстом "Запустить" с задержкой в 2 минуты и перезагрузкой страницы через 1 минуту после клика
// @match        https://app.stch.games/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    const delay = 5 * 60 * 1000; // Интервал для проверки карточек (5 минут)
    const initialTimeout = 5 * 1000; // Старт скрипта через (10 секунд)
    const reloadDelay = 7 * 30 * 1000; // Перезагрузка через 2 минуты после клика

    // Загружаем время последнего клика из localStorage, если оно есть
    let lastClickTime = parseInt(localStorage.getItem('lastClickTime')) || 0;

    // Функция для извлечения цены из карточки
    function getPrice(card) {
        const priceElement = card.querySelector(".me-lego__item-me-input-static.card__field .staticSpan");
        if (!priceElement) return 0;
        const priceText = priceElement.innerText.match(/\d+(\.\d+)?/); // Извлекаем число из текста
        return priceText ? parseFloat(priceText[0]) : 0;
    }

    // Функция для нахождения, сортировки и клика по кнопкам "Запустить"
    function clickNextButton() {
        const currentTime = Date.now();

        // Проверяем, прошло ли достаточно времени с последнего клика
        if (currentTime - lastClickTime < delay) {
            return; // Не кликаем, если время еще не прошло
        }

        // Находим все карточки на странице
        const cards = Array.from(document.querySelectorAll(".me-card-list-item-wrapper"));

        // Фильтруем карточки, где кнопка "Запустить" доступна и цена больше 0
        const validCards = cards.filter(card => {
            const price = getPrice(card);
            const targetButton = card.querySelector('button');
            return targetButton && targetButton.innerText.includes('Запустить') && !targetButton.disabled && price > 0;
        });

        // Если нет доступных карточек, ничего не делаем
        if (validCards.length === 0) {
            console.log("Нет доступных карточек с ценой больше 0.");
            return;
        }

        // Сортируем карточки по цене по убыванию
        validCards.sort((a, b) => getPrice(b) - getPrice(a));

        // Выбираем первую карточку (с самой высокой ценой)
        const targetCard = validCards[0];
        const targetButton = targetCard.querySelector('button');
        const cardPrice = getPrice(targetCard);

        // Если кнопка "Запустить" доступна, нажимаем её
        if (targetButton && targetButton.innerText.includes('Запустить') && !targetButton.disabled) {
            targetButton.click(); // Нажимаем кнопку
            console.log(`Кнопка "Запустить" нажата на карточке с самой высокой ценой: ${cardPrice}`);

            // Сохраняем время последнего клика в localStorage
            lastClickTime = currentTime;
            localStorage.setItem('lastClickTime', lastClickTime);

            // Перезагрузка страницы через указанное время после клика
            setTimeout(() => {
                location.reload();
            }, reloadDelay);
        }
    }

    // Настроим MutationObserver для отслеживания изменений в DOM
    const observer = new MutationObserver(() => {
                // Таймаут на 10 секунд перед первым запуском функции clickNextButton
        setTimeout(() => {
            clickNextButton(); // Первый запуск через 10 секунд
        }, initialTimeout); // Каждый раз вызываем функцию для клика
    });

    // Функция для повторного запуска скрипта после перезагрузки страницы
    function startScript() {
        // Запускаем observer на всем теле документа для отслеживания изменений
        observer.observe(document.body, { childList: true, subtree: true });

        // Таймаут на 10 секунд перед первым запуском функции clickNextButton
        setTimeout(() => {
            clickNextButton(); // Первый запуск через 10 секунд
        }, initialTimeout);
    }

    // Запускаем скрипт при загрузке страницы
    startScript();

})();