45 lines
2.2 KiB
JavaScript
45 lines
2.2 KiB
JavaScript
(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}.`);
|
||
})();
|
||
|