// Hamibot 微信小程序极简只刷新脚本(支持参数配置刷新间隔)

// 参数读取与校验
const { refreshInterval } = hamibot.env;
if (typeof refreshInterval === "undefined" || isNaN(Number(refreshInterval))) {
toast("请通过Hamibot参数面板启动脚本并填写刷新间隔!");
exit();
}
let interval = Number(refreshInterval);

// 悬浮窗
let infoWindow = floaty.rawWindow(
<frame bg="#00000000" borderWidth="2" borderColor="#000000" padding="0">
<vertical id="panel" w="200" h="80" padding="12" bg="#ffffffcc">
<text id="status" text="只刷新模式" textColor="#000000" textSize="15sp"/>
<text id="interval" text={刷新间隔:${interval}ms} textColor="#000000" textSize="13sp"/>
<text id="actual" text="实际刷新间隔:" textColor="#000000" textSize="13sp"/>
</vertical>
</frame>
);
infoWindow.setPosition(20, 40);

// 刷新循环
let lastTime = new Date().getTime();
while (true) {
let start = new Date().getTime();

// 刷新“数量”控件
let qty = text("数量").findOne(20);
if (qty && qty.bounds()) {
    press(qty.bounds().centerX(), qty.bounds().centerY(), 20);
}

// 计算实际刷新间隔
let now = new Date().getTime();
let actualInterval = now - lastTime;
lastTime = now;

// 更新悬浮窗
ui.run(() => {
    infoWindow.actual.setText("实际刷新间隔:" + actualInterval + "ms");
});

// 补足刷新间隔
let cost = now - start;
let remain = interval - cost;
if (remain > 0) sleep(remain);

}为什么这个代码运行了,但是在小程序不动

已存档
hahlx78288 · 1 个月前

回答

Hamibot AI
1
· 1 个月前

你的脚本可能无法操作小程序的原因可能有以下几点:

  1. 控件识别问题
  • 小程序页面可能没有显示"数量"文本控件
  • 需要使用更灵活的匹配方式,建议改为:
let qty = textMatches(/数量/).findOne(20);
  1. 点击操作问题
  • 可能需要使用click()代替press()
  • 建议添加点击坐标调试信息:
if (qty && qty.bounds()) {
    let bounds = qty.bounds();
    log(`点击坐标: ${bounds.centerX()}, ${bounds.centerY()}`);
    click(bounds.centerX(), bounds.centerY());
}
  1. 权限问题
  • 确保已开启:
    1. 无障碍服务权限
    2. 悬浮窗权限
    3. "允许后台弹窗"权限
  1. 执行环境问题
  • 确保脚本运行时处于小程序前台
  • 添加调试日志:
log("当前页面: " + currentPackage());
log("查找控件结果: " + (qty ? "找到" : "未找到"));
  1. 刷新间隔问题
  • 建议增加最小间隔限制:
interval = Math.max(1000, interval); // 最小1000ms

完整调试版示例:

// 参数读取与校验
const { refreshInterval } = hamibot.env;
if (typeof refreshInterval === "undefined" || isNaN(Number(refreshInterval))) {
    toast("请通过Hamibot参数面板启动脚本并填写刷新间隔!");
    exit();
}
let interval = Math.max(1000, Number(refreshInterval));

// 悬浮窗
let infoWindow = floaty.rawWindow(
    <frame bg="#00000000" borderWidth="2" borderColor="#000000" padding="0">
        <vertical id="panel" w="200" h="80" padding="12" bg="#ffffffcc">
            <text id="status" text="只刷新模式" textColor="#000000" textSize="15sp"/>
            <text id="interval" text={`刷新间隔:${interval}ms`} textColor="#000000" textSize="13sp"/>
            <text id="actual" text="实际刷新间隔:" textColor="#000000" textSize="13sp"/>
        </vertical>
    </frame>
);
infoWindow.setPosition(20, 40);

// 刷新循环
let lastTime = new Date().getTime();
while (true) {
    let start = new Date().getTime();
    
    // 调试日志
    log("当前页面: " + currentPackage());
    
    // 刷新“数量”控件
    let qty = textMatches(/数量/).findOne(20);
    if (qty && qty.bounds()) {
        let bounds = qty.bounds();
        log(`找到数量控件: ${bounds}`);
        click(bounds.centerX(), bounds.centerY());
    } else {
        log("未找到数量控件");
    }

    // 计算实际刷新间隔
    let now = new Date().getTime();
    let actualInterval = now - lastTime;
    lastTime = now;

    // 更新悬浮窗
    ui.run(() => {
        infoWindow.actual.setText("实际刷新间隔:" + actualInterval + "ms");
    });

    // 补足刷新间隔
    let cost = now - start;
    let remain = interval - cost;
    if (remain > 0) sleep(remain);
}
ℹ️ 本回答由 AI 生成,内容仅供参考