您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically skips liked/disliked songs. Uses a robust polling method to handle slow UI updates, like playlist refreshes.
当前为
// ==UserScript== // @name YouTube Music - Skip Liked/Disliked (Robust Polling) // @namespace http://tampermonkey.net/ // @version 1.3 // @description Automatically skips liked/disliked songs. Uses a robust polling method to handle slow UI updates, like playlist refreshes. // @author torch & Gemini // @match https://music.youtube.com/* // @require https://code.jquery.com/jquery-3.7.1.min.js // @license MIT // @grant none // ==/UserScript== (function($) { 'use strict'; let currentSongTitle = ""; /** * Эта функция не просто ждет, а активно проверяет появление кнопок. * Она будет пытаться найти лайк/дизлайк несколько раз в течение секунды. * @param {string} songTitle - Название трека для логов. */ function waitForButtonsAndSkip(songTitle) { const maxAttempts = 10; // Попыток const intervalMs = 100; // Интервал между попытками (10 * 100 = 1000 мс = 1 секунда ожидания) let attempts = 0; const checkInterval = setInterval(function() { attempts++; // На каждой итерации ищем элементы заново, чтобы работать с актуальным DOM const $likeButton = $('ytmusic-player-bar ytmusic-like-button-renderer[like-status="LIKE"]'); const $dislikeButton = $('ytmusic-player-bar ytmusic-like-button-renderer[like-status="DISLIKE"]'); const $skipButton = $('ytmusic-player-bar .next-button'); // Условие успеха: нашли лайк/дизлайк И есть кнопка "Далее" if ($skipButton.length > 0 && ($likeButton.length > 0 || $dislikeButton.length > 0)) { console.log(`[YT Music Skipper] Пропускаем "${songTitle}". Статус: ${$likeButton.length ? 'Лайк' : 'Дизлайк'}.`); $skipButton.trigger('click'); clearInterval(checkInterval); // Останавливаем проверку, задача выполнена return; } // Условие выхода: попытки закончились, а лайка/дизлайка не нашли if (attempts >= maxAttempts) { console.log(`[YT Music Skipper] Воспроизводим "${songTitle}". Лайк/дизлайк не обнаружен.`); clearInterval(checkInterval); // Останавливаем проверку } }, intervalMs); } // Главный цикл, который следит за сменой трека setInterval(function() { const $titleElement = $('ytmusic-player-bar .title'); const newTitle = $titleElement.text(); // Если название трека сменилось, запускаем механизм ожидания if ($titleElement.length > 0 && newTitle && newTitle !== currentSongTitle) { console.log(`[YT Music Skipper] Новый трек: "${newTitle}". Начинаем проверку статуса...`); currentSongTitle = newTitle; waitForButtonsAndSkip(newTitle); // Запускаем нашу новую "умную" функцию } }, 500); // Проверяем смену трека каждые полсекунды console.log('[YT Music Skipper] Надежный скрипт для пропуска песен запущен.'); })(window.jQuery);