我有一小段代码,每500毫秒不断点击一个名为“查看较旧的消息”的按钮,以便从网页加载无限滚动的内容。这样做的原因是个人的,但不用说,我正试图自动化一些会花费数星期不间断滚动的东西。
问题是随着脚本的运行,500毫秒的延迟会逐渐开始下降。经过这么多个小时,可能需要5秒或更长时间。我假设这个问题是由于Facebook长时间限制我的请求引起的,所以为了防止这种情况,我想让脚本运行一段时间 - 比如说2分钟 - 然后在运行之前延迟20秒再过2分钟,依此类推。我该怎么做呢?我绞尽脑汁,但我对JavaScript的有限知识并没有带来任何有意义的东西。
以下是完整的当前代码。
setInterval(function () {
document.getElementById('see_older').getElementsByClassName('content')[0].click();
}, 500);
提前多多感谢。
答案 0 :(得分: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,被分页等等,那么你仍然会得到时间间隔在你想要的事件之间。请参阅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 。