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