// 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);
}为什么这个代码运行了,但是在小程序不动
回答
你的脚本可能无法操作小程序的原因可能有以下几点:
- 控件识别问题:
- 小程序页面可能没有显示"数量"文本控件
- 需要使用更灵活的匹配方式,建议改为:
let qty = textMatches(/数量/).findOne(20);
- 点击操作问题:
- 可能需要使用
click()
代替press()
- 建议添加点击坐标调试信息:
if (qty && qty.bounds()) {
let bounds = qty.bounds();
log(`点击坐标: ${bounds.centerX()}, ${bounds.centerY()}`);
click(bounds.centerX(), bounds.centerY());
}
- 权限问题:
- 确保已开启:
- 无障碍服务权限
- 悬浮窗权限
- "允许后台弹窗"权限
- 执行环境问题:
- 确保脚本运行时处于小程序前台
- 添加调试日志:
log("当前页面: " + currentPackage());
log("查找控件结果: " + (qty ? "找到" : "未找到"));
- 刷新间隔问题:
- 建议增加最小间隔限制:
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);
}