我正在使用数据库应用程序,有时我必须单击网页上的数十个甚至数百个相同的按钮,所以我想节省一些时间并在Crome的Inspect-> Console窗口中运行脚本浏览器为我完成工作。我发现一个脚本可以很好地完成工作,但是在最初的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捕获到错误:“无法读取未定义的属性'click'”。随后的错误将不会被记录
调用SetTimeout函数中的input [i] .click()似乎存在一些问题,因为如果我在如下所示的简单for循环中运行它,它就可以正常工作:
javascript:var inputs = document.getElementsByClassName('BUTTON CLASS HERE');
for(var i=0; i<inputs.length;i++) {
inputs[i].click();
}
我在做什么错? 谢谢。
答案 0 :(得分:0)
inputs[inputs.length]
(在您的第一次迭代中,i === inputs.length
)将始终为undefined
-类数组对象在Javascript中为零索引,因此遇到inputs[i].click();
时,会引发错误。
或者将i
初始化为inputs.length - 1
,或者您可能会发现更容易使用原始代码,而只需await
一个Promise
即可在100毫秒左右后解析: / p>
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();
}
})();