Javascript 如何自动单击元素

Javascript 如何自动单击元素,javascript,html,google-chrome,Javascript,Html,Google Chrome,我在reddit上收到了很多保存的帖子/评论(似乎有一千条),我想知道如果不点击每个人的“取消保存”,我该如何取消这些帖子/评论的保存 这是我目前的做法: 我右键单击帖子的Unsave按钮并单击Inspect查找类名, 然后我用它来分析有多少帖子有这个按钮: document.getElementsByClassName("_10K5i7NW6qcm-UoCtpB3aK _3tRpmsTw--cwH6_MAO3ZOm _3yh2bniLq7bYr4BaiXowdO _2sAFaB0tx4Hd5K

我在reddit上收到了很多保存的帖子/评论(似乎有一千条),我想知道如果不点击每个人的“取消保存”,我该如何取消这些帖子/评论的保存

这是我目前的做法:

我右键单击帖子的
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,但我正在解决这个问题,同时也在修改其他元素的代码。