帮我写一个Hamibot脚本,实现:
1. 自动打开美团APP
2. 进入「外卖」页面
3. 自动点击「领券」按钮,领取所有可用优惠券
4. 操作完成后自动返回桌面
回答
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// ============== 配置参数 ==============
var APP_NAME = "美团";
var APP_PACKAGE = "com.sankuai.meituan";
var WAIT_TIME = 3000; // 页面加载等待时间(毫秒)
// =====================================
toastLog("🚀 美团领券脚本启动");
// ============== 工具函数 ==============
/**
* 随机等待
*/
function randomSleep(min, max) {
var time = random(min, max);
sleep(time);
}
/**
* 安全点击控件
*/
function safeClick(selector) {
try {
var w = selector.findOne(2000);
if (w && w.clickable()) {
w.click();
log("✅ 点击成功");
return true;
} else if (w) {
var b = w.bounds();
click(b.centerX(), b.centerY());
log("✅ 坐标点击成功");
return true;
}
log("⚠️ 未找到控件");
return false;
} catch (e) {
log("❌ 点击错误:" + e);
return false;
}
}
/**
* 检查并关闭弹窗
*/
function closePopups() {
var closeBtns = [
text("关闭"),
text("取消"),
text("稍后再说"),
text("知道了"),
desc("关闭")
];
for (var i = 0; i < closeBtns.length; i++) {
var btn = closeBtns[i].findOne(500);
if (btn) {
btn.click();
log("已关闭弹窗");
sleep(500);
}
}
}
// ============== 主流程 ==============
try {
// 1. 打开美团 APP
toastLog("📱 正在打开美团 APP...");
launchApp(APP_NAME);
sleep(WAIT_TIME);
// 检查是否成功启动
var meituan = text("美团").findOne(3000) || text("外卖").findOne(3000);
if (!meituan) {
toastLog("⚠️ 未检测到美团界面,请手动打开");
sleep(5000);
}
// 关闭可能的启动弹窗
closePopups();
// 2. 进入外卖页面
toastLog("🍔 正在进入外卖页面...");
var waimaiBtn = text("外卖").findOne(5000);
if (waimaiBtn) {
waimaiBtn.click();
log("✅ 已点击外卖入口");
sleep(WAIT_TIME);
} else {
// 尝试通过坐标点击(备用方案)
var waimaiBtn2 = desc("外卖").findOne(3000);
if (waimaiBtn2) {
waimaiBtn2.click();
log("✅ 已通过描述点击外卖");
sleep(WAIT_TIME);
} else {
toastLog("⚠️ 未找到外卖入口,请手动点击");
sleep(3000);
}
}
closePopups();
// 3. 点击领券按钮
toastLog("🎫 正在领取优惠券...");
// 方案 1:查找领券入口
var couponBtn = textContains("领券").findOne(5000) ||
textContains("红包").findOne(3000) ||
descContains("领券").findOne(3000);
if (couponBtn) {
couponBtn.click();
log("✅ 已进入领券页面");
sleep(WAIT_TIME);
// 领取所有可用优惠券
var claimCount = 0;
var maxAttempts = 10;
for (var i = 0; i < maxAttempts; i++) {
closePopups();
// 查找可领取的券
var claimBtn = text("领取").findOne(2000) ||
text("立即领取").findOne(2000) ||
text("去使用").findOne(2000);
if (claimBtn && claimBtn.clickable()) {
claimBtn.click();
claimCount++;
log("✅ 已领取第 " + claimCount + " 张券");
sleep(1500);
} else {
log("ℹ️ 未发现可领取的券");
break;
}
}
toastLog("🎉 共领取 " + claimCount + " 张优惠券");
} else {
toastLog("⚠️ 未找到领券入口");
}
// 4. 返回桌面
toastLog("🏠 正在返回桌面...");
home();
sleep(1000);
toastLog("✅ 脚本执行完成");
} catch (e) {
toastLog("❌ 脚本出错:" + e);
home();
}
// ============== 结束 ==============
使用说明
-
权限配置
- 开启 Hamibot「无障碍服务」
- 授予「悬浮窗权限」
- 关闭电池优化,允许后台运行
-
界面适配
美团 APP 版本更新可能导致元素选择器失效。如脚本无法找到元素,请使用 Hamibot 客户端的「布局分析」工具重新获取按钮的真实text、desc或id特征。 -
运行建议
- 首次运行建议在屏幕开启状态下观察,确认流程正常
- 可根据需要调整
WAIT_TIME等待时间 - 建议在 WiFi 环境下运行,避免网络延迟
-
注意事项
- 部分优惠券可能需要手动验证或满足条件才能领取
- 账号异常行为可能触发风控,建议合理设置运行频率
- 脚本仅用于个人辅助,请勿用于商业批量操作
调试技巧
如脚本执行失败,查看 Hamibot 客户端日志,根据报错信息调整选择器:
// 打印当前界面元素
var widgets = className("android.widget.TextView").find();
log("当前页面元素数量:" + widgets.size());
for (var i = 0; i < widgets.size(); i++) {
log("元素 " + i + ": " + widgets.get(i).text());
}
如需进一步优化,可提供具体界面截图或日志信息。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实