Javascript 定期自动点击列表项
Auto click of the list items periodically by Javascript
我有一个页面,其中有一个列表,我需要连续和定期自动点击所有项目。此外,我有一个按钮,需要在单击每个项目后单击。
毕竟,当它完成所有项目的点击时它会重复。我写了一个 Javascript 代码,它可以正常工作。但问题是这是一个非常冗长的代码,因为我在列表中有大约 170 个项目。仅针对 7 项的代码示例如下:
setInterval(function(){
var btn = document.getElementById("ember331");
var span_0 = document.getElementsByClassName("ember-view")[0];
setTimeout(function(){
span_0.scrollIntoView();
document.getElementById("ember104").scrollIntoView();
span_0.click(); }, 5000);
setTimeout(function(){
btn.click(); }, 8000);
var span_1 = document.getElementsByClassName("ember-view")[1];
setTimeout(function(){
span_1.click(); }, 13000);
setTimeout(function(){
btn.click(); }, 16000);
var span_2 = document.getElementsByClassName("ember-view")[2];
setTimeout(function(){
span_2.click(); }, 21000);
setTimeout(function(){
btn.click(); }, 24000);
var span_3 = document.getElementsByClassName("ember-view")[3];
setTimeout(function(){
span_3.click(); }, 290000);
setTimeout(function(){
btn.click(); }, 32000);
var span_4 = document.getElementsByClassName("ember-view")[4];
setTimeout(function(){
span_4.click(); }, 37000);
setTimeout(function(){
btn.click(); }, 40000);
var span_5 = document.getElementsByClassName("ember-view")[5];
setTimeout(function(){
span_5.click(); }, 450000);
setTimeout(function(){
btn.click(); }, 48000);
var span_6 = document.getElementsByClassName("ember-view")[6];
setTimeout(function(){
span_6.click(); }, 450000);
setTimeout(function(){
btn.click(); }, 48000);
}, 53000);
您可能已经注意到它只有 7 个项目那么长。
那么,能不能写得又短又另类呢??
考虑改用 async
函数。每当您需要延迟时,await
一个在所需的毫秒数后解析的 Promise。然后,您可以在需要时循环 .ember-view
s 和 await
,然后再单击:
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const btn = document.getElementById("ember331");
// use a recursive setTimeout, not setInterval,
// so you don't have to hard-code the interval time
setTimeout(async function timeoutCallback() {
await delay(2000);
for (const emberView of document.querySelectorAll('.ember-view')) {
await delay(3000);
emberView.scrollIntoView();
emberView.click();
await delay(3000);
btn.click();
}
setTimeout(timeoutCallback, 5000);
});
我有一个页面,其中有一个列表,我需要连续和定期自动点击所有项目。此外,我有一个按钮,需要在单击每个项目后单击。 毕竟,当它完成所有项目的点击时它会重复。我写了一个 Javascript 代码,它可以正常工作。但问题是这是一个非常冗长的代码,因为我在列表中有大约 170 个项目。仅针对 7 项的代码示例如下:
setInterval(function(){
var btn = document.getElementById("ember331");
var span_0 = document.getElementsByClassName("ember-view")[0];
setTimeout(function(){
span_0.scrollIntoView();
document.getElementById("ember104").scrollIntoView();
span_0.click(); }, 5000);
setTimeout(function(){
btn.click(); }, 8000);
var span_1 = document.getElementsByClassName("ember-view")[1];
setTimeout(function(){
span_1.click(); }, 13000);
setTimeout(function(){
btn.click(); }, 16000);
var span_2 = document.getElementsByClassName("ember-view")[2];
setTimeout(function(){
span_2.click(); }, 21000);
setTimeout(function(){
btn.click(); }, 24000);
var span_3 = document.getElementsByClassName("ember-view")[3];
setTimeout(function(){
span_3.click(); }, 290000);
setTimeout(function(){
btn.click(); }, 32000);
var span_4 = document.getElementsByClassName("ember-view")[4];
setTimeout(function(){
span_4.click(); }, 37000);
setTimeout(function(){
btn.click(); }, 40000);
var span_5 = document.getElementsByClassName("ember-view")[5];
setTimeout(function(){
span_5.click(); }, 450000);
setTimeout(function(){
btn.click(); }, 48000);
var span_6 = document.getElementsByClassName("ember-view")[6];
setTimeout(function(){
span_6.click(); }, 450000);
setTimeout(function(){
btn.click(); }, 48000);
}, 53000);
您可能已经注意到它只有 7 个项目那么长。
那么,能不能写得又短又另类呢??
考虑改用 async
函数。每当您需要延迟时,await
一个在所需的毫秒数后解析的 Promise。然后,您可以在需要时循环 .ember-view
s 和 await
,然后再单击:
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const btn = document.getElementById("ember331");
// use a recursive setTimeout, not setInterval,
// so you don't have to hard-code the interval time
setTimeout(async function timeoutCallback() {
await delay(2000);
for (const emberView of document.querySelectorAll('.ember-view')) {
await delay(3000);
emberView.scrollIntoView();
emberView.click();
await delay(3000);
btn.click();
}
setTimeout(timeoutCallback, 5000);
});