Javascript 如何自动单击元素
我在reddit上收到了很多保存的帖子/评论(似乎有一千条),我想知道如果不点击每个人的“取消保存”,我该如何取消这些帖子/评论的保存 这是我目前的做法: 我右键单击帖子的Javascript 如何自动单击元素,javascript,html,google-chrome,Javascript,Html,Google Chrome,我在reddit上收到了很多保存的帖子/评论(似乎有一千条),我想知道如果不点击每个人的“取消保存”,我该如何取消这些帖子/评论的保存 这是我目前的做法: 我右键单击帖子的Unsave按钮并单击Inspect查找类名, 然后我用它来分析有多少帖子有这个按钮: document.getElementsByClassName("_10K5i7NW6qcm-UoCtpB3aK _3tRpmsTw--cwH6_MAO3ZOm _3yh2bniLq7bYr4BaiXowdO _2sAFaB0tx4Hd5K
Unsave
按钮并单击Inspect查找类名,
然后我用它来分析有多少帖子有这个按钮:
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
是
s的类名,它们是链接的unsave按钮的父级,comment unsave button
是
s的类名,它们是注释的unsave按钮的父级
所以,使用选择器字符串
.link-unsave-button > a, .comment-unsave-button > a
您可以遍历所有这些
和。单击()
由于每次单击都需要网络操作,因此您可能应该在每次单击之间添加延迟,例如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');
})();
当您使用旧reddit时,这将删除/saved
页面上所有保存的链接。(是的,我自己试过了,效果不错)
您可能可以在new reddit上执行类似的操作(只需在new reddit上使用选择器即可),但类名可能会有所不同(在我的设备上,它们与您的不同),您可能需要重新检查DOM并在某些情况下更改代码,这并不好。最好从旧的reddit中执行此操作。您需要类似于[…buttonInstances]的内容。forEach(button=>button.click())代码>但这将单击所有按钮。您需要首先确保buttonInstances
包含正确的按钮。嘿,谢谢@Chris G!而且@CertainPerformance,这对我也很有用。我只是在reddit home按钮上测试了它,稍微重写了代码:constdelay1=ms=>newpromise(res=>setTimeout(res,ms));(async()=>{for(document.getElementsByClassName('u 30BbATRhFv3V83DHNDjJAO')){a.click();wait delay(500);}console.log('done');}()代码>有一些问题,比如每次函数运行后都必须重命名const delay,但我正在解决这个问题,同时也在修改其他元素的代码。