延迟单击网页上的所有类似按钮

Click on all similar buttons on a web page with a delay

我正在使用一个数据库应用程序,有时我必须在网页上单击数十个甚至数百个相同的按钮,所以我想我可以节省一些时间并 运行 检查中的脚本 - > Crome 浏览器的控制台 window 为我完成这项工作。我找到了一个可以很好地完成工作的脚本,但是数据库应用程序在前 10-20 次点击后挂起,所以我与我们的开发人员交谈,他们建议点击之间应该有一个小的延迟。他们不确定有多少,所以我需要试验一下。所以,现在我正在尝试 运行 以下脚本:

javascript:var inputs = document.getElementsByClassName('BUTTON CLASS HERE');
$(function theLoop (i) {
setTimeout(function () {
inputs[i].click();
if (--i) {          
  theLoop(i);       
}
}, 100);
})(inputs.length);

它什么也没做,但给我以下错误信息: gE02JAse0g9.js:60 ErrorUtils 发现错误:"Cannot read property 'click' of undefined"。不会记录后续错误

在 SetTimeout 函数中调用 inputs[i].click() 似乎有一些问题,因为如果我 运行 它在一个简单的 for 循环中工作得很好:

javascript:var inputs = document.getElementsByClassName('BUTTON CLASS HERE'); 
for(var i=0; i<inputs.length;i++) { 
inputs[i].click();
}

我做错了什么? 谢谢

inputs[inputs.length](在您的第一次迭代中,i === inputs.length)将始终为 undefined - 类似数组的对象在 Javascript 中的索引为零,因此当 [=遇到 14=],会抛出错误。

要么将 i 初始化为 inputs.length - 1,或者您可能会发现使用原始代码更容易,只需 await 一个 Promise,它会在 100 毫秒左右后解析:

const resolveAfter100MS = () => new Promise(res => setTimeout(res, 100));
(async () => {
  var inputs = document.getElementsByClassName('_42ft _4jy0'); 
  for(var i=0; i<inputs.length;i++) { 
    inputs[i].click();
    await resolveAfter100MS();
  }
})();