From d7c20a496b0f6fc305159666aad07122883e6da4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BD=D0=B0=20=D0=9F=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BA=D0=BE?= Date: Sun, 16 Nov 2025 15:23:56 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?/=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 script.js diff --git a/script.js b/script.js new file mode 100644 index 0000000..9302289 --- /dev/null +++ b/script.js @@ -0,0 +1,45 @@ +(async function(){ + const delay = ms => new Promise(r=>setTimeout(r,ms)); + const UNSUB_DELAY = 900; + const CONFIRM_TIMEOUT = 2000; + + function findUnsubButtons(){ + return Array.from(document.querySelectorAll('ytd-subscribe-button-renderer button[aria-label^="Отменить подписку"], ytd-subscribe-button-renderer button')) + .filter(b => (b.textContent||'').toLowerCase().includes('вы подписаны') || (b.getAttribute('aria-label')||'').toLowerCase().includes('отменить подписку')); + } + + async function waitAndConfirm(){ + const start = Date.now(); + while(Date.now() - start < CONFIRM_TIMEOUT){ + const dialog = document.querySelector('tp-yt-paper-dialog yt-confirm-dialog-renderer, ytd-popup-container yt-confirm-dialog-renderer'); + if(dialog){ + const confirmBtn = dialog.querySelector('#confirm-button button, button[aria-label*="Отказаться"], button[aria-label*="Unsubscribe"]'); + if(confirmBtn){ try{ confirmBtn.click(); return true; }catch(e){console.warn(e); return false; } } + } + await delay(150); + } + // fallback: глобальная кнопка по тексту + const global = Array.from(document.querySelectorAll('button, tp-yt-paper-button')).find(el=>(el.textContent||'').toLowerCase().includes('отказаться от подписки') || (el.textContent||'').toLowerCase().includes('отписаться')); + if(global){ try{ global.click(); return true; }catch(e){console.warn(e);} } + return false; + } + + const buttons = findUnsubButtons(); + if(buttons.length === 0){ console.log('Не найдено кнопок "Вы подписаны" на этой части страницы. Прокрутите и повторите.'); return; } + console.log(`Найдено ${buttons.length} кнопок. Начинаю...`); + let succeeded = 0; + for(const btn of buttons){ + if(!btn || !btn.isConnected) continue; + try{ + btn.scrollIntoView({behavior:'auto', block:'center'}); + btn.click(); + const confirmed = await waitAndConfirm(); + if(confirmed) succeeded++; + await delay(UNSUB_DELAY); + }catch(e){ + console.warn('Ошибка при обработке', e); + } + } + console.log(`Готово. Подтверждений выполнено: ${succeeded}/${buttons.length}.`); +})(); +