And*_*evy 5 javascript youtube bookmarklet playlist
由于YouTube 在其界面上不再使用该remove duplicates按钮(大约在同一时间,他们不再使用非聚合物界面),因此用户在删除播放列表中的重复数据时不知所措。我到处寻找工具来做到这一点,但无济于事。我发现这个脚本可以从播放列表中删除所有视频,并且想知道是否可以修改它(由比我更了解 javascript 的人)以仅删除重复的视频:
setInterval(function () {
document.querySelector('#primary button[aria-label="Action menu"]').click();
var things = document.evaluate(
'//span[contains(text(),"Remove from")]',
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
for (var i = 0; i < things.snapshotLength; i++) {
things.snapshotItem(i).click();
}
}, 1000);
Run Code Online (Sandbox Code Playgroud)
实际上(截至 2021 年 11 月 7 日)仍然有一种官方方法来创建播放列表的新的无重复副本:
打开 Youtube Music 并创建播放列表https://music.youtube.com/library/playlists (播放列表需要在 youtube music 上创建,否则播放列表将在 youtube music 上不可见...)
打开您想要在常规 YouTube 上删除重复项的播放列表,例如:https ://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb
使用第一个视频的菜单(视频右侧的三个点)并选择“保存到播放列表”,然后将播放列表的第一个视频保存到新创建的 YouTube 音乐播放列表(在步骤 1 中创建)
www将您的网址替换为music,以访问旧播放列表的 YouTube 音乐视图,例如: https: //music.youtube.com/playlist ?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb
使用菜单(三个点)并选择“添加到播放列表”将旧播放列表添加到新的(在步骤 1 创建的)播放列表中。由于新的播放列表已包含旧播放列表的视频(在步骤 3 中添加),因此您现在会遇到一个问题:是否要跳过重复项,因此...
...您选择“跳过重复项”。这似乎不仅会跳过最初已包含在新播放列表中的视频,而且仅添加旧播放列表中的每个视频一次,从而删除重复项。
替代方案:Javascript解决方案:
这并不是很好,因为它似乎只能在每次按下按钮后进行睡眠,但这对我有用:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function removeduplicates() {
let titles = document.querySelectorAll('#primary #video-title')
let href_pattern = RegExp('https?://www\\.youtube\\.com/watch\\?v=[^&]*&list=[^&]*&index=')
titles = Array.from(titles).filter(t => href_pattern.test(t.href))
let lastid='';
for (let i = 0; i < titles.length; i++) {
let id = titles[i].href.match(/\\?v=([^&]+)/)[1]
if(id == lastid){
titles[i].focus()
titles[i].parentElement.parentElement.parentElement.parentElement.parentElement.querySelector('button[aria-label="Action menu"]').click()
await sleep(100)
var things = document.evaluate(
'//span[contains(text(),"Remove from")]',
document,
null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
null
);
await sleep(300)
for (var j = 0; j < things.snapshotLength; j++) {
things.snapshotItem(j).click();
}
console.log(titles[i].innerText)
}
lastid=id;
}
}
removeduplicates()
Run Code Online (Sandbox Code Playgroud)
另请注意,它仅在您的语言设置为英语时才有效,因为删除按钮是通过字符串“Remove from”找到的。
要运行此程序,您需要位于要从中删除重复项的播放列表的播放列表页面(例如https://www.youtube.com/playlist?list=PLlrATfBNZ98dudnM48yfGUldqGD0S4FFb )。然后按 F12,将代码粘贴到 javascript 控制台并按 Enter。
注意:仅当两个相同的视频彼此跟随时才会删除重复项,因此您需要按视频的发布日期等对播放列表进行排序。
注意2:仅考虑当前加载到浏览器窗口中的视频,因此您需要向下滚动直到播放列表末尾,以便真正加载所有视频。
| 归档时间: |
|
| 查看次数: |
5355 次 |
| 最近记录: |