Javascript 指定时间的循环函数,后跟延迟
我有一小段代码,每隔500毫秒连续单击一个名为“查看旧消息”的按钮,以便从网页加载无限滚动的内容。这样做的原因是个人的,但不用说,我正在尝试自动化的东西,这将需要我几个星期的不停滚动,否则做 问题是,随着脚本的运行,500毫秒的延迟逐渐开始下降。这么多小时后,可能需要5秒或更长时间。我假设这个问题是由于Facebook在这么长时间后限制了我的请求造成的,所以为了防止出现这种情况,我想让脚本运行一段时间(比如2分钟),然后再延迟20秒,然后再运行2分钟,以此类推。我该怎么做呢?我绞尽脑汁,但我有限的JavaScript知识并没有带来任何有意义的东西 下面是当前代码的全部内容Javascript 指定时间的循环函数,后跟延迟,javascript,loops,delay,Javascript,Loops,Delay,我有一小段代码,每隔500毫秒连续单击一个名为“查看旧消息”的按钮,以便从网页加载无限滚动的内容。这样做的原因是个人的,但不用说,我正在尝试自动化的东西,这将需要我几个星期的不停滚动,否则做 问题是,随着脚本的运行,500毫秒的延迟逐渐开始下降。这么多小时后,可能需要5秒或更长时间。我假设这个问题是由于Facebook在这么长时间后限制了我的请求造成的,所以为了防止出现这种情况,我想让脚本运行一段时间(比如2分钟),然后再延迟20秒,然后再运行2分钟,以此类推。我该怎么做呢?我绞尽脑汁,但我有限
setInterval(function () {
document.getElementById('see_older').getElementsByClassName('content')[0].click();
}, 500);
先谢谢你
var-lastChange;
函数doClick(){
如果(新日期()-lastChange<120000/*2分钟*/){
document.getElementById('see_older')。getElementsByClassName('content')[0]。单击();
设置超时(doClick,500);
}else设置超时(runScript,20000/*20s*/);
}
(函数runScript(){
lastChange=新日期();
doClick();
})();
-
我建议在
setInterval
上使用setTimeout
,因为如果浏览器需要一段时间来执行、失去焦点并停止执行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
- 下面是使用Python的API,它基本上完成了您想要做的事情
var
定义吗?如果要将其附加到这样的对象,则不必用var
定义。这就是JavaScript的威力(也是它危险的一部分)Var
用于在引用全局变量或试图创建新的局部变量时不明显的情况。好的,祝你好运。有时候,你只需要把它做好,不能永远试图把它做到完美。
/* 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