循环函数指定的时间,然后是延迟

时间:2015-10-08 19:40:44

标签: javascript loops delay

我有一小段代码,每500毫秒不断点击一个名为“查看较旧的消息”的按钮,以便从网页加载无限滚动的内容。这样做的原因是个人的,但不用说,我正试图自动化一些会花费数星期不间断滚动的东西。

问题是随着脚本的运行,500毫秒的延迟会逐渐开始下降。经过这么多个小时,可能需要5秒或更长时间。我假设这个问题是由于Facebook长时间限制我的请求引起的,所以为了防止这种情况,我想让脚本运行一段时间 - 比如说2分钟 - 然后在运行之前延迟20秒再过2分钟,依此类推。我该怎么做呢?我绞尽脑汁,但我对JavaScript的有限知识并没有带来任何有意义的东西。

以下是完整的当前代码。

setInterval(function () {
document.getElementById('see_older').getElementsByClassName('content')[0].click();
}, 500);

提前多多感谢。

2 个答案:

答案 0 :(得分:2)

  1. 跟踪脚本何时开始运行
  2. 虽然距离不到2分钟,但每隔500毫秒就要点击一次。
  3. 跑了约2分钟后,在20秒内停下来排队。
  4. 转到第2步。
  5. -

    var lastChange;
    
    function doClick() {
      if (new Date() - lastChange < 120000 /* 2 mins */) {
        document.getElementById('see_older').getElementsByClassName('content')[0].click();
        setTimeout(doClick, 500);
      } else setTimeout(runScript, 20000 /* 20s */);
    }
    
    (function runScript() {
      lastChange = new Date();
      doClick();
    })();
    

    -

    我建议使用setTimeout而不是setInterval,因为如果浏览器需要一段时间才能执行,失去焦点并停止执行JS,被分页等等,那么你仍然会得到时间间隔在你想要的事件之间。请参阅https://stackoverflow.com/a/731625/1059070

答案 1 :(得分:1)

通过设置另一个计时器来切换你的功能是否有效。

/* When true do load else don't. */
window.doLoad = true

setInterval(function () {
    if window.doLoad {
        document.getElementById('see_older').getElementsByClassName('content')[0].click();
    }
}, 500);

/* This will toggle doLoad every two minutes. */
setInterval(function () {
    if (window.onLoad == true) { 
        window.doLoad = false;
    } else { window.doLoad = true; }
}, 120000); // two minutes of milliseconds

在您的情况下,您可能最好使用 Facebook Graph API