NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Auto Makers // @namespace http://tampermonkey.net/ // @version 2.0 // @description Searches and clicks the "Apply" button globally without delays after inserting wallet address. // @author Your Name // @match https://photon-sol.tinyastro.io/en/lp/* // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; const walletAddress = "MarNJnsu4JEc8in6MjL6XFEgQYW8rbErpostY1AVSEL"; // Ваш кошелёк // Основная функция автоматизации async function automateSteps() { console.log("[DEBUG] Начинаем автоматизацию..."); // 1. Поиск колонки "Makers" и нажатие на кнопку "Фильтр" const makersColumn = await waitForMakersColumn(); if (!makersColumn) { console.error("[DEBUG] Колонка 'Makers' не найдена."); return; } console.log("[DEBUG] Колонка 'Makers' найдена:", makersColumn); const filterButton = makersColumn.querySelector('button') || makersColumn.nextElementSibling?.querySelector('button'); if (filterButton) { console.log("[DEBUG] Кнопка фильтра найдена:", filterButton); filterButton.click(); } else { console.error("[DEBUG] Кнопка фильтра не найдена."); return; } // 2. Ждём появления поля ввода const inputField = await waitForElement(() => { return document.querySelector('input.c-field__input[placeholder="Enter wallet address"]'); }, 10000); if (!inputField) { console.error("[DEBUG] Поле ввода не найдено."); return; } console.log("[DEBUG] Поле ввода найдено, вставляем кошелек..."); setNativeInputValue(inputField, walletAddress); // 3. Ждём появления кнопки "Apply" в любом месте const applyButton = await waitForElement(() => { return [...document.querySelectorAll('button')].find( button => button.textContent.trim().toLowerCase() === 'apply' ); }, 10000); if (applyButton) { console.log("[DEBUG] Кнопка 'Apply' найдена, нажимаем..."); applyButton.focus(); // Фокусируемся applyButton.click(); // Нажимаем console.log("[DEBUG] Кнопка 'Apply' успешно нажата."); } else { console.error("[DEBUG] Кнопка 'Apply' не найдена после ожидания."); } } // Утилита: Ожидание элемента function waitForElement(selectorFn, timeout = 10000, interval = 500) { return new Promise((resolve) => { const startTime = Date.now(); function check() { const element = selectorFn(); if (element) { resolve(element); } else if (Date.now() - startTime > timeout) { resolve(null); // Таймаут } else { setTimeout(check, interval); } } check(); }); } // Утилита: Установка значения в input и уведомление React/Vue/Angular function setNativeInputValue(input, value) { const nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set; nativeInputValueSetter.call(input, value); input.dispatchEvent(new Event('input', { bubbles: true })); } // Функция для поиска колонки "Makers" с повторным зацикленным поиском async function waitForMakersColumn() { let makersColumn = null; while (!makersColumn) { makersColumn = await waitForElement(() => { return [...document.querySelectorAll('.c-grid-table__th')].find(column => column.textContent.trim().includes("Makers") ); }, 10000); // время ожидания до 10 секунд на каждую попытку if (!makersColumn) { console.log("[DEBUG] Колонка 'Makers' не найдена, пробуем снова через 3 секунды..."); await new Promise(resolve => setTimeout(resolve, 3000)); // ждем 3 секунды перед следующей попыткой } } return makersColumn; } // Периодическая проверка загрузки страницы function waitForPageToLoad() { const interval = setInterval(() => { if (isPageLoaded()) { clearInterval(interval); // Останавливаем проверку console.log("[DEBUG] Страница загружена, начинаем автоматизацию..."); automateSteps(); // Запуск автоматизации } }, 1000); // Проверка каждую секунду } // Функция проверки наличия индикатора загрузки (замените на свой индикатор) function isPageLoaded() { // Пример: проверяем наличие спиннера или другого индикатора загрузки return !document.querySelector('.loading-indicator'); // Замените на подходящий селектор для вашего сайта } // Запускаем проверку загрузки страницы waitForPageToLoad(); })();