首页 > 解决方案 > 使用 settimeout 和 for 循环延迟 + 1 次延迟

问题描述

在我之前提出的问题中,我在延迟方面遇到了一些问题。上一个问题: settimeout 和 for 循环的延迟

我的目的是从网站获取一些数据,并在 IE 中使用控制台。当用户单击具有标记名“某物”的元素时,内容会更改

如果我只想通过以下方式单击元素,则此代码运行完美:

for (var x = 1; x < 5; x++) {
    (function(i) {
        setTimeout(function() {
    document.getElementsByTagName("something")[i].click();    }, i * 1000)
  }(x))
}

但在我的情况下,我还需要在点击后从网站获取内容,所以我在点击后添加了一个新行:

myarray=[];
        for (var x = 1; x < 5; x++) {
            (function(i) {
                setTimeout(function() {
            document.getElementsByTagName("something")[i].click();
    var x=theelement.innerHTML;
    myarray.push(x);
    }, i * 1000)
          }(x))
        }

因此,使用数组我可以在单击后获取内容。问题是,在单击站点加载约 1-2 秒后,我上面的代码尝试立即获取元素并将其 innerHTML 值分配给 x 变量。

我试图在延迟内进行“嵌套延迟”但不起作用,因为它们是单独评估的。所以我试着像这样解决这个问题:

outer settime with delay 1000ms
   element.click()
      inner settime with delay 3000ms
          x=element.innerhtml
      innersettime close tag
outer settime close tag

在这种情况下,内部 settime 和外部 settime 是分开评估的,不像其他语言中众所周知的 sleep() 函数。目的是在“单击”和“获取元素的内容”功能之间进行延迟。而这 2 个功能必须重复 30 次。而这30次之间也必须是延迟。

link1.click();
3sec pause;   -->this is the pause between "click" and "get content"
x=elem1.innerHTML;
myarray.push(x);
1sec pause;
link2.click();
3secpause;  --> this is the pause between each loop (there is 30link on the site)
x=elem2.innerHTML;
myarray.push(x);
until link30.click()....

网址不变,只有内容。

标签: javascriptnestedclicksettimeoutdelay

解决方案


推荐阅读