You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现带setTimeout的循环脚本以自动搜索新值?

实现循环自动检查并执行点击的脚本

我来帮你搞定这个循环脚本的问题~你已经知道要用setTimeout,其实核心就是把你的检查逻辑封装成函数,然后让它递归调用自己,或者用setInterval来定时重复执行。下面给你两种可行的方案,还有一些关键细节要注意:

方案一:递归调用setTimeout(推荐)

这种方式的好处是,每次都会等上一轮的检查逻辑完全执行完,再等待指定间隔后执行下一次,不会出现任务堆叠的问题。

先把你的代码补全并封装成函数:

function checkAndTriggerClick() {
  // 注意:innerHTML返回的是字符串,必须转成数字才能正确比较
  const timeText = document.getElementById("timer").innerHTML;
  const time = parseFloat(timeText);

  if (time < 0.4) {
    const x2Text = document.getElementById("2x-total").innerHTML;
    const x3Text = document.getElementById("3x-total").innerHTML;
    const x2 = parseFloat(x2Text);
    const x3 = parseFloat(x3Text);

    if (x2 < 2 * x3) {
      // 替换成你实际要点击的元素ID
      const targetBtn = document.getElementById("your-click-target");
      if (targetBtn) {
        // 现代浏览器推荐用这种方式创建点击事件(替代旧的initMouseEvent)
        const clickEvent = new MouseEvent("click", {
          bubbles: true,
          cancelable: true,
          view: window
        });
        targetBtn.dispatchEvent(clickEvent);
        console.log("触发了点击操作!");
      } else {
        console.error("找不到要点击的目标元素,请检查ID是否正确");
      }
    }
  }

  // 每500毫秒重复执行一次(可以根据需求调整间隔,比如1000就是1秒)
  setTimeout(checkAndTriggerClick, 500);
}

// 启动循环:调用这个函数就开始自动检查了
checkAndTriggerClick();

方案二:使用setInterval

如果你觉得递归写法有点绕,也可以用setInterval来定时触发检查逻辑,它会按固定间隔重复执行:

// 设置定时器,每500毫秒执行一次
const checkInterval = setInterval(() => {
  const timeText = document.getElementById("timer").innerHTML;
  const time = parseFloat(timeText);

  if (time < 0.4) {
    const x2Text = document.getElementById("2x-total").innerHTML;
    const x3Text = document.getElementById("3x-total").innerHTML;
    const x2 = parseFloat(x2Text);
    const x3 = parseFloat(x3Text);

    if (x2 < 2 * x3) {
      const targetBtn = document.getElementById("your-click-target");
      if (targetBtn) {
        const clickEvent = new MouseEvent("click", {
          bubbles: true,
          cancelable: true,
          view: window
        });
        targetBtn.dispatchEvent(clickEvent);
        console.log("触发了点击操作!");
      }
    }
  }
}, 500);

// 如果需要停止循环,执行下面这行代码:
// clearInterval(checkInterval);

几个必须注意的关键点

  • 字符串转数字:一定要用parseFloat把innerHTML的字符串转成数字,不然直接比较字符串会出bug(比如"1" < "0.4"会被判定为true,这显然不对)。
  • 事件创建的现代方式:你原来用的initMouseEvent已经被废弃了,现在推荐用MouseEvent构造函数,兼容性更好。
  • 元素存在性检查:加个判断确保要点击的元素存在,避免控制台报错。
  • 间隔调整:根据你的实际需求修改间隔时间,比如如果需要更频繁检查,可以改成200毫秒,不要太频繁就行,避免占用过多资源。

内容的提问来源于stack exchange,提问作者Lord of Logic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:29:25