您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Быстрая версия: автоматически нажимает "Показать еще" без задержки. Добавлена плавающая кнопка для паузы/возобновления работы.
当前为
// ==UserScript== // @name Steam Auto-Click "Show More Content" (v4.2, with Pause Button) // @namespace http://tampermonkey.net/ // @version 4.2 // @description Быстрая версия: автоматически нажимает "Показать еще" без задержки. Добавлена плавающая кнопка для паузы/возобновления работы. // @author Gemini & Community // @match https://steamcommunity.com/app/* // @match https://steamcommunity.com/workshop/browse/* // @match https://steamcommunity.com/id/*/myworkshopfiles/* // @grant GM_addStyle // @run-at document-idle // @icon https://store.steampowered.com/favicon.ico // @license MIT // ==/UserScript== (function() { 'use strict'; // --- НАСТРОЙКИ --- const MAX_CLICKS = 150; // Увеличено, так как клики происходят быстрее const POLL_INTERVAL_MS = 1000; // Интервал для запасной проверки (в мс) // --- КОНЕЦ НАСТРОЕК --- let clickCount = 0; let isClicking = false; let isPaused = false; // Новая переменная состояния паузы let observer; let pollIntervalId; let pauseButton; // Переменная для кнопки паузы console.log("Userscript v4.2 (with Pause Button) запущен."); // Функция для создания и управления кнопкой паузы const createPauseButton = () => { pauseButton = document.createElement('button'); pauseButton.id = 'tm-pause-button'; pauseButton.textContent = 'Пауза'; // Применяем стили через GM_addStyle для большей совместимости GM_addStyle(` #tm-pause-button { position: fixed; bottom: 20px; right: 20px; z-index: 9999; padding: 10px 15px; background-color: #4CAF50; /* Зеленый - работает */ color: white; border: none; border-radius: 5px; cursor: pointer; font-size: 14px; box-shadow: 0 2px 5px rgba(0,0,0,0.2); transition: background-color 0.3s; } #tm-pause-button:hover { opacity: 0.9; } `); pauseButton.addEventListener('click', () => { isPaused = !isPaused; // Инвертируем состояние паузы if (isPaused) { pauseButton.textContent = 'Возобновить'; pauseButton.style.backgroundColor = '#f44336'; // Красный - на паузе console.log("Скрипт поставлен на паузу."); } else { pauseButton.textContent = 'Пауза'; pauseButton.style.backgroundColor = '#4CAF50'; // Зеленый - работает console.log("Скрипт возобновлен."); // Сразу после возобновления пытаемся кликнуть processContent(); } }); document.body.appendChild(pauseButton); }; // Функция для очистки: отключает наблюдатель, интервал и удаляет кнопку const cleanup = () => { console.log("Завершение работы скрипта. Очистка..."); if (observer) { observer.disconnect(); } if (pollIntervalId) { clearInterval(pollIntervalId); } if (pauseButton) { pauseButton.remove(); } }; // Основная функция для обработки контента const processContent = () => { // Если скрипт на паузе, ничего не делаем if (isPaused || isClicking) return; const noMoreContent = document.getElementById('NoMoreContent'); if (noMoreContent && noMoreContent.style.display !== 'none') { console.log("Больше контента нет. Скрипт остановлен."); cleanup(); return; } if (clickCount >= MAX_CLICKS) { console.warn(`Достигнут лимит в ${MAX_CLICKS} кликов. Скрипт остановлен.`); cleanup(); return; } const moreButton = document.getElementById('GetMoreContentBtn'); if (moreButton && moreButton.style.display !== 'none') { isClicking = true; clickCount++; console.log(`Кнопка найдена. Мгновенный клик #${clickCount}...`); // --- Клик происходит немедленно --- moreButton.querySelector('a')?.click(); requestAnimationFrame(() => { isClicking = false; }); } }; // --- ЗАПУСК СКРИПТА --- // Создаем кнопку паузы при старте createPauseButton(); // Целевой узел для наблюдения. const targetNode = document.body; // Конфигурация для наблюдателя: следим за структурой и ИЗМЕНЕНИЕМ АТРИБУТОВ const config = { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }; // Создаем наблюдателя observer = new MutationObserver(() => { // Проверяем паузу перед обработкой мутаций if (isPaused) return; processContent(); }); // Начинаем наблюдение observer.observe(targetNode, config); // Запускаем периодическую проверку как надежный запасной вариант pollIntervalId = setInterval(processContent, POLL_INTERVAL_MS); // Выполняем первую проверку немедленно при запуске processContent(); })();