如何自动点击元素

时间:2019-12-22 11:14:55

标签: javascript html google-chrome

我在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()应该做什么),保存按钮似乎具有相同的类。您将如何处理?我已经看到了一些解决方案,但是代码似乎已被弃用,我只是继续复制和粘贴并得到错误。

也许有人可以为我指明正确的方向,也许在我可以收集有关letvar的更多知识以及为什么我应该使用箭头功能等的路上 >

我希望这会让您相信我至少已经尝试过一些事情。

1 个答案:

答案 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上做起。