youtube_subs_cleaner/script.js

45 lines
2.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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