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