Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 指定时间的循环函数,后跟延迟_Javascript_Loops_Delay - Fatal编程技术网

Javascript 指定时间的循环函数,后跟延迟

Javascript 指定时间的循环函数,后跟延迟,javascript,loops,delay,Javascript,Loops,Delay,我有一小段代码,每隔500毫秒连续单击一个名为“查看旧消息”的按钮,以便从网页加载无限滚动的内容。这样做的原因是个人的,但不用说,我正在尝试自动化的东西,这将需要我几个星期的不停滚动,否则做 问题是,随着脚本的运行,500毫秒的延迟逐渐开始下降。这么多小时后,可能需要5秒或更长时间。我假设这个问题是由于Facebook在这么长时间后限制了我的请求造成的,所以为了防止出现这种情况,我想让脚本运行一段时间(比如2分钟),然后再延迟20秒,然后再运行2分钟,以此类推。我该怎么做呢?我绞尽脑汁,但我有限

我有一小段代码,每隔500毫秒连续单击一个名为“查看旧消息”的按钮,以便从网页加载无限滚动的内容。这样做的原因是个人的,但不用说,我正在尝试自动化的东西,这将需要我几个星期的不停滚动,否则做

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

下面是当前代码的全部内容

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

  • 跟踪脚本运行的开始时间
  • 在不到2分钟的时间里,每500毫秒点击一次
  • 运行约2分钟后,停止并排队等待20秒后的下一次运行
  • 转至步骤2
  • -

    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,它基本上完成了您想要做的事情

    这可能只是由于浏览器闲置而失去操作系统的注意力。那么,,通过JavaScript无法加快速度。如果向下滚动时页面上的所有以前的内容仍在页面上,则可能会出现内存问题。一个可能的选项是使用包含youtube视频的iframe,并在播放该视频和在后台运行脚本时保持浏览器选项卡的焦点。这可能会迫使操作系统保留浏览器选项卡的资源。@arcyqwerty就是这样,上次我运行的脚本的内存为170万K。这个解决方案不能解决甚至缓解这个问题吗?170万K等于1.7 GB。你的浏览器可能无法快速处理那么多数据。既然它还没有崩溃,我假设你没有使用IE。你最好把你想要的内容提取到文件中并保存到磁盘,但这是另一个问题。什么是doLoad?我在任何地方都找不到对它的引用。doLoad是一个新变量,由此代码添加到window对象中。这可能是一个新手的问题,但它的定义在哪里?在第一行?不是所有变量都必须用
    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