指定时间的循环功能,然后是延迟
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);
非常感谢。
- 跟踪脚本 运行ning 开始的时间
- 虽然还不到 2 分钟,请继续每 500 毫秒点击一次。
- 在 运行 约 2 分钟后,停止并在 20 秒后排队等待下一个 运行。
- 转到第 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。
- Graph API documentation from Facebook
- 这里是 an existing question,API 使用 Python 来做你想做的基本相同的事情。
我有一小段代码每 500 毫秒连续点击一个名为 "See Older Messages" 的按钮,以便从网页加载无限滚动的内容。这样做的原因是个人的,但不用说,我正在尝试自动化一些事情,否则我会花费数周的时间不停地滚动。
问题是 500 毫秒的延迟随着脚本 运行s 的推移逐渐开始下降。这么多小时后,可能需要 5 秒或更长时间。我假设这个问题是由于 Facebook 在很长时间后限制了我的请求造成的,所以为了防止这种情况,我想使脚本 运行 一段时间 - 比如 2 分钟 - 然后延迟可能 20在它之前的秒数 运行s 再次持续 2 分钟,依此类推。我该怎么做呢?我绞尽脑汁,但我有限的知识JavaScript没有想出任何有意义的东西。
下面是完整的当前代码。
setInterval(function () {
document.getElementById('see_older').getElementsByClassName('content')[0].click();
}, 500);
非常感谢。
- 跟踪脚本 运行ning 开始的时间
- 虽然还不到 2 分钟,请继续每 500 毫秒点击一次。
- 在 运行 约 2 分钟后,停止并在 20 秒后排队等待下一个 运行。
- 转到第 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。
- Graph API documentation from Facebook
- 这里是 an existing question,API 使用 Python 来做你想做的基本相同的事情。