我在reddit上保存了很多帖子/评论(似乎有上千个),并且想知道如何在不单击取消保存每个人的情况下将其保存。
这是我到目前为止的方法:
我右键单击帖子的Unsave
按钮,然后单击“检查”以找出班级名称,
然后我用它来分析有多少个按钮具有该按钮:
document.getElementsByClassName("_10K5i7NW6qcm-UoCtpB3aK _3tRpmsTw--cwH6_MAO3ZOm _3yh2bniLq7bYr4BaiXowdO _2sAFaB0tx4Hd5KxVkdUcAx _28vEaVlLWeas1CDiLuTCap")
这将导致一个数组,我现在将进一步讲解并将其保存在变量中,以运行带有单击事件的函数:
var buttonInstances = document.getElementsByClassName("_10K5i7NW6qcm-UoCtpB3aK _3tRpmsTw--cwH6_MAO3ZOm _3yh2bniLq7bYr4BaiXowdO _2sAFaB0tx4Hd5KxVkdUcAx _28vEaVlLWeas1CDiLuTCap")
buttonInstances.someClickFunction()
事情是(除了我不确切知道someClickFunction()
应该做什么),保存按钮似乎具有相同的类。您将如何处理?我已经看到了一些解决方案,但是代码似乎已被弃用,我只是继续复制和粘贴并得到错误。
也许有人可以为我指明正确的方向,也许在我可以收集有关let
和var
的更多知识以及为什么我应该使用箭头功能等的路上
我希望这会让您相信我至少已经尝试过一些事情。
答案 0 :(得分:1)
在旧版本的reddit上要容易得多-元素的名称可以预测。 link-unsave-button
是<li>
的类名,它们是链接的未保存按钮的父级,comment-unsave-button
是<li>
的类名,它们是用于链接的未保存按钮的父级
因此,使用选择器字符串
.link-unsave-button > a, .comment-unsave-button > a
您可以遍历所有这些<a>
和.click()
。
由于每次点击都需要进行网络操作,因此您可能应该在每次点击之间添加一个延迟,例如500ms:
const delay = ms => new Promise(res => setTimeout(res, ms));
(async () => {
for (const a of document.querySelectorAll('.link-unsave-button > a, .comment-unsave-button > a')) {
a.click();
await delay(500);
}
console.log('done');
})();
当您使用旧的reddit时,这会删除/saved
页上的所有已保存链接。 (是的,我自己尝试过,它有效)
您可能会在新的Reddit上做类似的事情(只是通过使用新的Reddit上的选择器),但是类名可能会有所不同(在我的设备上,它们与您的设备不同),您可能必须重新检查DOM并在某些情况下更改代码,这不是很好。最好从旧的reddit上做起。