javascript - 如何自动点击元素

标签 javascript html google-chrome

我在 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() 应该做什么),保存按钮似乎具有相同的类。你会怎么做呢?我已经看到了一些解决方案,但代码似乎已被弃用,我只是不断复制和粘贴并收到错误。

也许有人可以给我指出正确的方向,也许在这个过程中我可以收集一些关于 letvar 的进一步知识,以及为什么我应该使用箭头函数等等...

我希望这能让您相信我至少自己尝试过一些东西。

最佳答案

在旧的 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/

相关文章:

javascript - 配置属性遮蔽

android - Android 和 iOS 上的 HTML5 音频有哪些限制?

html - 按钮未正确连接到输入

javascript - chrome.storage.local.set() 无法正常工作

javascript - 强制 SWFObject 使用 EMBED 而不是 OBJECT

javascript - Node path.relative 返回不正确的路径

javascript - 径向动画因桌面和移动设备而异

javascript - 如何将 3D obj 文件转换为 three.js 中的粒子

html - 使用 wget 提取元标记属性

google-chrome - 谷歌浏览器将本地主机重定向到 https