Javascript 如何一次取消所有Youtube频道的订阅?

Javascript 如何一次取消所有Youtube频道的订阅?,javascript,automation,youtube,Javascript,Automation,Youtube,在过去的10年里,我订阅了300多个Youtube频道,现在我必须清理我的Youtube,一个一个地取消订阅需要一些时间,有没有办法一次取消所有频道的订阅?步骤1:转到并滚动到页面底部,将所有项目填充到屏幕上 步骤2:右键单击页面上的任意位置,单击“检查元素”(或仅单击“检查”),然后单击“控制台”,然后复制-粘贴下面的脚本,然后单击返回 步骤3: var i = 0; var myVar = setInterval(myTimer, 3000); function myTimer () {

在过去的10年里,我订阅了300多个Youtube频道,现在我必须清理我的Youtube,一个一个地取消订阅需要一些时间,有没有办法一次取消所有频道的订阅?

步骤1:转到并滚动到页面底部,将所有项目填充到屏幕上

步骤2:右键单击页面上的任意位置,单击“检查元素”(或仅单击“检查”),然后单击“控制台”,然后复制-粘贴下面的脚本,然后单击返回

步骤3:

var i = 0;

var myVar = setInterval(myTimer, 3000);

function myTimer () {

    var els = document.getElementById("grid-container").getElementsByClassName("ytd-expanded-shelf-contents-renderer");

    if (i < els.length) {

        els[i].querySelector("[aria-label^='Unsubscribe from']").click();

        setTimeout(function () {

            var unSubBtn = document.getElementById("confirm-button").click();

        }, 2000);

        setTimeout(function () {

            els[i].parentNode.removeChild(els[i]);

        }, 2000);

    }

    i++;

    console.log(i + " unsubscribed by YOGIE");

    console.log(els.length + " remaining");

}
var i=0;
var myVar=setInterval(myTimer,3000);
函数myTimer(){
var els=document.getElementById(“网格容器”).getElementsByClassName(“ytd扩展书架内容呈现器”);
如果(i
第四步:坐下来看魔术

享受

注意:如果脚本在某处停止,请刷新页面并再次执行所有四个步骤。最有效值:

(复制以上所有内容,包括最后一份)

var i=0;
var myVar=setInterval(myTimer,200);
函数myTimer(){
var els=document.getElementById(“网格容器”).getElementsByClassName(“ytd扩展书架内容呈现器”);
如果(i
这是对最佳答案的一点补充: 您还可以使用jscompress[dot]com压缩脚本,然后在脚本开头添加javascript:,并将其添加到书签中—您可以从那里运行它—以防您不习惯使用控制台或类似的东西。祝你好运!:)

附言
我没有足够的代表点发表评论,因此,不需要告诉我一些我知道如果可能的话我应该做的事情。

更新Prashant Pimpale的答案。刚才刚做的

转到并在控制台中复制/粘贴以下内容:

var i = 0;

var myVar = setInterval(myTimer, 200);

function myTimer () {

    var els = document.getElementById("contents").getElementsByClassName("ytd-subscribe-button-renderer");

    if (i < els.length) {

        els[i].querySelector('.ytd-subscribe-button-renderer').click();

        setTimeout(function () {

            var unSubBtn = document.getElementById("confirm-button").click();

        }, 500);

        setTimeout(function () {

            els[i].parentNode.removeChild(els[i]);

        }, 1000);
    }

    i++;

    console.log(i + " unsubscribed");
    console.log(els.length + " remaining");
}
var i=0;
var myVar=setInterval(myTimer,200);
函数myTimer(){
var els=document.getElementById(“内容”).getElementsByClassName(“ytd订阅按钮呈现器”);
如果(i

更新其他人提供的答案(因为最新的更新不适用于我):

var i=0;
var count=document.queryselectoral(“ytd通道呈现器:非(.ytd项目节呈现器)”).length;
myTimer();
函数myTimer(){
如果(计数=0)返回;
el=document.querySelector(“.ytd订阅按钮呈现器”);
el.click();
setTimeout(函数(){
var unSubBtn=document.getElementById(“确认按钮”)。单击();
i++;
计数--;
控制台日志(i+“取消订阅”);
控制台日志(计数+“剩余”);
setTimeout(函数(){
el=document.querySelector(“ytd通道渲染器”);
el.parentNode.removeChild(el);
myTimer();
}, 250);
}, 250);

}
嗯,真希望我在推出自己的产品之前先用谷歌搜索一下。我在
async
wait
中玩得很开心。在试图取消订阅内容时,屏幕会出现一些难看的闪烁,但这项工作做得很好

此脚本一次捕获所有频道的一个先决条件是“耗尽”页面中的滚动条,即保持滚动,直到到达频道列表的末尾。正如其他人所说的,打开开发人员控制台并粘贴下面的脚本

我已经在相关部分进行了评论,以防这最终成为某人的学习经历;)

Youtube频道退订者(工作于2020年4月)
  • 访问链接:
    https://www.youtube.com/feed/channels
  • 按F12键
  • 在控制台中插入下面的代码
函数youtubeUnsubscriber(){
var count=document.queryselectoral(“ytd通道呈现器:非(.ytd项目节呈现器)”).length;
var随机延迟=500;
如果(计数=0)返回false;
功能取消订阅可见(随机延迟){
如果(计数=0){
scrollTo(0,document.body.scrollHeight);
setTimeout(函数(){
youtubeUnsubscriber();
}, 10000)
}
unsubscribeButton=document.querySelector(“.ytd subscribe button呈现程序”);
取消订阅按钮。单击();
setTimeout(函数(){
document.getElementById(“确认按钮”)。单击()
计数--;
日志(“剩余:”,计数);
setTimeout(函数(){
unsubscribedElement=document.querySelector(“ytd频道呈现器”);
取消订阅.parentNode.removeChild(取消订阅);
取消订阅可见(随机延迟)
},随机化
var i = 0;

var myVar = setInterval(myTimer, 200);

function myTimer () {

    var els = document.getElementById("contents").getElementsByClassName("ytd-subscribe-button-renderer");

    if (i < els.length) {

        els[i].querySelector('.ytd-subscribe-button-renderer').click();

        setTimeout(function () {

            var unSubBtn = document.getElementById("confirm-button").click();

        }, 500);

        setTimeout(function () {

            els[i].parentNode.removeChild(els[i]);

        }, 1000);
    }

    i++;

    console.log(i + " unsubscribed");
    console.log(els.length + " remaining");
}
/** 
 * Youtube bulk unsubsribe fn.
 * Wrapping this in an IIFE for browser compatibility.
 */
(async function iife() {
  // This is the time delay after which the "unsubscribe" button is "clicked"; Tweak to your liking!
  var UNSUBSCRIBE_DELAY_TIME = 2000

/**
 * Delay runner. Wraps `setTimeout` so it can be `await`ed on. 
 * @param {Function} fn 
 * @param {number} delay 
 */
  var runAfterDelay = (fn, delay) => new Promise((resolve, reject) => {
    setTimeout(() => {
      fn()
      resolve()
    }, delay)
  })



  // Get the channel list; this can be considered a row in the page.
  var channels = Array.from(document.getElementsByTagName(`ytd-channel-renderer`))
  console.log(`${channels.length} channels found.`)

  var ctr = 0
  for (const channel of channels) {
    // Get the subsribe button and trigger a "click"
    channel.querySelector(`[aria-label^='Unsubscribe from']`).click()
    await runAfterDelay(() => {
      // Get the dialog container...
      document.getElementsByTagName(`yt-confirm-dialog-renderer`)[0]
        // and find the confirm button...
        .querySelector(`#confirm-button`)
        // and "trigger" the click!
        .click()
      console.log(`Unsubsribed ${ctr + 1}/${channels.length}`)
      ctr++
    }, UNSUBSCRIBE_DELAY_TIME)
  }
})()
// Go to the following link in your YouTube: https://www.youtube.com/feed/channels
// Scroll the page all the way down until you reach the very last subscribed channel in your list
const DELAY = 100;
const delay = ms => new Promise(res => setTimeout(res, ms));
const list = document.querySelectorAll("#grid-container > ytd-channel-renderer");
for (const sub of list) {
  await delay(DELAY);
  sub.querySelector("#subscribe-button > ytd-subscribe-button-renderer > paper-button").click();
  await delay(DELAY);
  document.querySelector("#confirm-button > a").addEventListener('click', async event => {
    await delay(DELAY);
    console.log(sub.querySelector("#text").innerText);
    await delay(DELAY);
  });
  await delay(DELAY);
  document.querySelector("#confirm-button > a").click()
  await delay(DELAY);
}
$$('.yt-uix-button-subscribed-branded').forEach(function(el) { el.click(); $$('.overlay-confirmation-unsubscribe-button').forEach(function(el) { el.click(); }); console.log('Bye YouTube'); });
let btns = document.querySelectorAll('paper-button > yt-formatted-string');

for (let i = 0; i < btns.length; i += 1) {
    if (btns[i].innerText.toLowerCase() === 'subscribed') {
        btns[i].click();
        document.getElementById('confirm-button').click();
    }
}
var unsubBtns = document.querySelectorAll(' div:nth-child(2) > div:nth-child(2) > div:nth-child(2) > ytd-subscribe-button-renderer:nth-child(1) > paper-button:nth-child(1)');

var i = 0; 

var interV = setInterval(function(){
   unsubBtns[i].click();
   i++;
   document.querySelector('yt-formatted-string.style-blue-text').click()
}, 1000);