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-views 和 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);
});