指定时间的循环功能,然后是延迟

Loop function for specified time, followed by delay

我有一小段代码每 500 毫秒连续点击一个名为 "See Older Messages" 的按钮,以便从网页加载无限滚动的内容。这样做的原因是个人的,但不用说,我正在尝试自动化一些事情,否则我会花费数周的时间不停地滚动。

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

下面是完整的当前代码。

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

非常感谢。

  1. 跟踪脚本 运行ning 开始的时间
  2. 虽然还不到 2 分钟,请继续每 500 毫秒点击一次。
  3. 在 运行 约 2 分钟后,停止并在 20 秒后排队等待下一个 运行。
  4. 转到第 2 步。

-

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、被换页等等,那么您仍然会得到您想要的事件之间的时间间隔。参见 。

通过设置另一个计时器来切换您的函数是否执行任何操作。

/* 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 图表 API