我在 reddit 上收到了很多已保存的帖子/评论(似乎有一千个),我想知道如何取消保存它们,而不是点击每个人的“取消保存”。
这是我到目前为止的方法:
我右键单击帖子的取消保存
按钮,然后单击“检查”以查找类名,
然后我用它来分析有多少帖子有该按钮:
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
的进一步知识,以及为什么我应该使用箭头函数等等...
我希望这能让您相信我至少自己尝试过一些东西。
最佳答案
在旧的 reddit 上要容易得多 - 元素的命名是可以预见的。 link-unsave-button
是 <li>
的类名s 是链接取消保存按钮的父级,并且 comment-unsave-button
是 <li>
的类名s 是评论取消保存按钮的父级。
所以,使用选择器字符串
.link-unsave-button > a, .comment-unsave-button > a
您可以迭代所有这些 <a>
和 .click()
他们。
由于每次点击都需要网络操作,因此您可能应该在每次点击之间添加延迟,例如 500 毫秒:
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');
})();
这会删除您 /saved
上所有已保存的链接页面,当你在旧的 reddit 上时。 (是的,我自己尝试过,有效)
您可能可以在新的 reddit 上执行类似的操作(只需使用新的 reddit 上的选择器即可),但类名称可能会有所不同(在我的设备上,它们与您的设备不同),您可能需要重新检查DOM 并在某些情况下更改代码,这不太好。最好从旧的 reddit 上进行。
关于javascript - 如何自动点击元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59443722/