【问题标题】:Delay repetitive javascript code延迟重复的 JavaScript 代码
【发布时间】:2018-07-11 08:04:14
【问题描述】:

长话短说,我正在尝试自动化我正在使用的社交网站(Facebook、Instagram 等)上的一些操作。比如加好友、点赞帖子等等,比如在this picture987654321@中延迟几秒后点击每个关注按钮

我想在浏览器的控制台中使用以下脚本(不工作,在 Chrome 中测试):

var clikker = document.getElementsByClassName('_qv64e _gexxb _4tgw8 _njrw0');

for(var i=0;i<clikker.length;i++){

    function sleep (time) {
        return new Promise((resolve) => setTimeout(resolve, time));
    }

    sleep(5000).then(() => {
    clikker[i].click();

    });
}

我认为这应该可行。任何为完成它所做的改进都将受到高度赞赏。

谢谢。

【问题讨论】:

  • 试试for(let i=0
  • 你知道它会一直坏掉吗? _qv64e _gexxb _4tgw8_njrw0 类将发生变化。 Facebook 也不允许你这样做。您必须使用 API。
  • 为什么有人想要自动关注、添加朋友或喜欢帖子?更不用说这是不允许的,wizkid 已经评论过。我的意思是,如果您认识他们或者您真的想与他们联系,则手动选择朋友。这不像你想要大众友好,对吧?那会很奇怪。
  • 如果不允许,他们就不会建议大量的“朋友”跟随。此外,Google 和 Mozilla 会禁止在 Chrome 和 Firefox 中执行此操作的扩展程序。
  • 为什么 Google 和 Mozilla 会因为违反 Facebook 服务条款而禁止扩展程序?

标签: javascript facebook instagram sleep


【解决方案1】:

您正在异步函数处理程序中使用变量i 的闭包。当您的解析处理程序被调用时,循环已经完成,i 的值是点击器的长度

您可以使用NodeListforEach 方法,这是querySelectorAll 的返回类型,然后使用setTimeout(无需承诺):

document.querySelectorAll('_qv64e _gexxb _4tgw8 _njrw0')
.forEach(
  (element,index)=>
    setTimout(
      _=>element.click(),
      (index+1)*5000
    )
)

【讨论】:

  • 对于 Instagram,我在日志“POST graph.instagram.com/logging_client_events net::ERR_BLOCKED_BY_CLIENT”中收到此错误,每个脚本都会触发。但是,这似乎工作得很好(虽然它会一次单击所有按钮)点击者[i].click(); }"
【解决方案2】:

您可以尝试将 for 循环包装在 if 语句中

if(clikker.length){
console.log(clikker);

    for(var i=0;i<clikker.length;i++){

        function sleep (time) {
            return new Promise((resolve) => setTimeout(resolve, time));
        }

        sleep(5000).then(() => {
        clikker[i].click();

        });
    }
}

可能是您的数组返回 0 或未定义。始终检查以查看数组的内容。

【讨论】:

  • 不,问题是当clickker[i].click() 被调用时,循环已经完成并且i 的值是clickker.length 所以clickker[i] 是未定义的。以下代码 for(var i=0;i&lt;5;i++){setTimeout(_=&gt;console.log(i),20);} 将记录 5、5 次。但是,当您在创建时传递带有i 闭包的函数时,它将记录 0、1、2、3、4:for(var i=0;i&lt;5;i++){setTimeout((newI=&gt;_=&gt;console.log(newI))(i),20);} 最好是避免使用异步处理的循环并使用 Array.prototype 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多