代码之家  ›  专栏  ›  技术社区  ›  SwiftyQA

在随机持续时间内点击Chrome扩展的按钮

  •  0
  • SwiftyQA  · 技术社区  · 2 年前

    我正在创建一个chrome扩展,根据用户输入计算时间范围,然后按下网页上的按钮。举个例子;用户将持续时间输入为5分钟。程序将下边界设置为持续时间-1(4),将上边界设置为连续时间+1(6)。它会随机创建一个持续时间(例如4分23秒)。到目前为止,它是随机按下按钮的,但当我测试持续时间时,它不匹配。有时它是完全随机按下的,而不是计算出的随机持续时间。所以,我很困惑。我做错了什么?我认为我的数学计算持续时间是正确的,但不确定。。

    
    function startClicking(duration) {
        const userDuration = duration || 5; // Default user input is 5 if no duration is provided
        
        const lowerBoundary = Math.max(1, userDuration - 1); // Ensure lower boundary minimum is 1
        const upperBoundary = userDuration + 1; // Upper boundary (6)
      
        clickTargetButton(); // Click the button immediately
      
        setTimeout(function clickWithRandomDuration() {
          const randomizedMinutes = Math.floor(Math.random() * (upperBoundary - lowerBoundary)) + lowerBoundary;
          const randomizedSeconds = Math.floor(Math.random() * 60);
          const randomizedDuration = randomizedMinutes * 60 * 1000 + randomizedSeconds * 1000;
      
          clickTargetButton(); // Click the button after the randomized duration
          console.log(`Randomized/Next click in: ${randomizedMinutes} minutes ${randomizedSeconds} seconds`);
      
          setInterval(clickWithRandomDuration, randomizedDuration);
        }, userDuration * 60 * 1000); // Initial delay for the first random click
      }
    
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Saleh7    2 年前

    要解决此问题,可以使用setTimeout而不是setInterval。以下是startClicking函数的更新版本:

    function startClicking(duration) {
      const userDuration = duration || 5; // Default user input is 5 if no duration is provided
    
      const lowerBoundary = Math.max(1, userDuration - 1); // Ensure lower boundary minimum is 1
      const upperBoundary = userDuration + 1; // Upper boundary (6)
    
      function clickWithRandomDuration() {
        const randomizedMinutes = Math.floor(Math.random() * (upperBoundary - lowerBoundary)) + lowerBoundary;
        const randomizedSeconds = Math.floor(Math.random() * 60);
        const randomizedDuration = randomizedMinutes * 60 * 1000 + randomizedSeconds * 1000;
    
        clickTargetButton(); // Click the button after the randomized duration
        console.log(`Randomized/Next click in: ${randomizedMinutes} minutes ${randomizedSeconds} seconds`);
    
        setTimeout(clickWithRandomDuration, randomizedDuration); // Use setTimeout instead of setInterval
      }
    
      clickTargetButton(); // Click the button immediately
      setTimeout(clickWithRandomDuration, userDuration * 60 * 1000); // Initial delay for the first random click
    }
    

    在这个更新的代码中,我替换了 setInterval 具有 setTimeout 内部 clickWithRandomDuration 作用这样可以确保在随机化的持续时间之后安排下一次单击,而不会创建多个重叠的间隔。