【问题标题】:Trigger mouse click and random intervals触发鼠标点击和随机间隔
【发布时间】:2017-01-03 18:38:42
【问题描述】:

我正在尝试自动执行一项任务,我必须在手形图标上连续单击鼠标左键。我可以在设定的时间范围内执行此操作,例如 32 秒和 756 毫秒,但我需要在随机时间范围内执行此操作。例如,如果我们可以在每次单击鼠标左键后添加 2-3 秒。谁能指导我如何使点击间隔随机?我正在使用 Chrome。

setInterval(function(){ 
    $( "[id^='hand_'].handIcon").trigger('click');
}, 32756);

【问题讨论】:

    标签: javascript jquery html


    【解决方案1】:

    使用在setTimeout 之后调用自身的递归函数。这将无限运行,并且每次以 32000 到 35000 毫秒(32 到 35 秒)之间的随机间隔运行。

    var clickHand = function() {
      $("[id^='hand_'].handIcon").trigger('click');
      setTimeout(clickHand, (Math.random() * 3000) + 32000);
    }
    
    clickHand();
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    【讨论】:

    • 这很聪明,我忘了setTimeout
    • 嗨,乔恩,感谢您的快速回复。它工作得非常好,感染我刚刚使用秒表检查了间隔时间:)...感谢您的帮助!
    【解决方案2】:

    即使您在 setInterval 处使用 Math.random,它也只会注册一次,使用该特定随机值。

    有两种选择:

    • 运行一次,然后使用新的随机时间帧重新注册(使用 clearInterval 删除旧的)
    • 每 x 毫秒运行一次并添加随机检查以查看是否运行

    例如。第二种情况:

    setInterval(function() { 
      if (Math.random() > 0.8)
        $( "[id^='hand_'].handIcon").trigger('click');
    }, 200);
    

    这将每 200 毫秒运行一次,但只有 0.8 次,例如,平均每 250 毫秒,但随机。当然,您可以调整数字。

    第一个例子,因为我今天真的很受启发(rs):

    let action = () => $( "[id^='hand_'].handIcon").trigger('click');
    let old, register = () => {
      if (old) clearInterval(old);
      old = setInterval(() => {
        action();
        register(); // re-register
      }, 32756 + 3000*Math.random() - 1500)
    };
    register();
    

    【讨论】:

    • 你好栾,也感谢你的快速回答。 Infect your answer也按预期工作,但我使用了 Jon 的代码,因为它看起来既精确又小。这两个帖子都是今天的学习:)
    • “第二种情况”可能不够随机。函数触发的时间间隔仍然是可预测的,例如如果函数在 00:00.00 开始,则模式可能是 00:00.00、00:00.20、00:00.60、00:00.80、00:01.20、00:01.40 等。请注意,跳过了两个间隔,但仍然存在模式。
    【解决方案3】:

    你的答案是 setTimeout 作为随机延迟的回调

    var timeout = function(callback) {
       var time = Math.floor(Math.random()*32756);
       return setTimeout(function(){
          callback();
          timeout(callback);
       }, time)
    };
    
    timeout(function(){
       $( "[id^='hand_'].handIcon").trigger('click');
    })
    

    【讨论】:

      【解决方案4】:

      使用setTimeout 代替setInterval。然后它将只运行一次,您可以在该时间段后设置一个新的(随机)超时。您可以将其包装在一个不错的函数中,该函数的调用方式与 setIntervalsetTimeout 类似,但使用范围而不是单个值。

      // Generic function to set this interval
      function setRandomInterval(f, min, max) {
        setTimeout(function() {
          f();
          setRandomInterval(f, min, max) 
        }, min + Math.random() * (max - min));
      };
      
      // Calling it, specifying a min and a max timeout
      setRandomInterval(function(){
      
        console.log(new Date()); // For demo
        //$( "[id^='hand_'].handIcon").trigger('click');
      
      }, 200, 3000);

      【讨论】:

        猜你喜欢
        • 2017-12-29
        • 1970-01-01
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多