Загрузить файлы в «/»
This commit is contained in:
parent
6bdbc0d685
commit
d7c20a496b
1 changed files with 45 additions and 0 deletions
45
script.js
Normal file
45
script.js
Normal file
|
|
@ -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}.`);
|
||||
})();
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue