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();
})();