点击页面中的金额较大的券,点击“立即抢券”,然后输入验证码

HAMI_2294588953 · 2 天前

回答

Hamibot AI
1
· 2 天前

以下是实现该自动化流程的完整脚本示例。代码已针对 Hamibot 的 Rhino 1.7.15 引擎进行兼容处理,并包含关键步骤的容错与日志输出。

// 文档地址 https://docs.hamibot.com/
auto.waitFor();

// 1. 获取页面所有文本节点(需根据目标APP的实际UI结构调整选择器)
var texts = className("android.widget.TextView").find();
var maxAmount = -1;
var targetNode = null;

// 2. 遍历文本,提取数字并对比找出金额最大的券
for (var i = 0; i < texts.length; i++) {
    var txt = texts[i].text();
    // 匹配金额中的数字部分(支持整数与小数)
    var match = txt.match(/(\d+(\.\d+)?)/);
    if (match) {
        var amount = parseFloat(match[1]);
        if (amount > maxAmount) {
            maxAmount = amount;
            targetNode = texts[i];
        }
    }
}

if (targetNode == null) {
    log("未找到包含金额的券元素");
    exit();
}
log("已定位最大金额券: " + maxAmount);

// 3. 点击该券区域,使“立即抢券”按钮可见或触发页面跳转
targetNode.click();
sleep(800);

// 4. 查找并点击“立即抢券”按钮
var grabBtn = text("立即抢券").findOne(2000);
if (grabBtn) {
    grabBtn.click();
    log("已点击立即抢券");
} else {
    log("未找到立即抢券按钮,请检查按钮文本或UI层级");
    exit();
}

// 5. 等待验证码输入框出现并填入
sleep(1000);
var inputBox = className("android.widget.EditText").findOne(3000);
if (inputBox) {
    var verifyCode = "123456"; // 替换为实际验证码获取逻辑
    inputBox.setText(verifyCode);
    log("验证码已输入: " + verifyCode);
    
    // 可选:点击确认/提交按钮
    var submitBtn = text("确认").findOne(2000) || text("提交").findOne(2000);
    if (submitBtn) {
        submitBtn.click();
        log("已点击提交");
    }
} else {
    log("未检测到验证码输入框,请检查弹窗是否被拦截或延迟");
}

关键实现说明

  1. 选择器适配:脚本使用 className("android.widget.TextView") 作为基础查找范围。不同APP的券金额可能使用 iddesc 或特定 className。请使用 Hamibot 客户端的布局分析工具,替换为精确选择器以提升稳定性。
  2. 金额解析逻辑:通过正则 /(\d+(\.\d+)?)/ 提取文本中的首个数字序列,并转为浮点数对比。若金额格式特殊(如 ¥50.0050元),该正则仍可正确捕获。
  3. 超时控制:所有 findOne() 均附带毫秒级超时参数(如 2000),避免脚本因元素未加载而永久阻塞。
  4. 验证码输入setText() 适用于标准 EditText。若目标APP使用自定义键盘或安全输入框,需改用 click() 定位输入框后,通过 input() 或按键模拟输入。

最佳实践建议

  • 动态页面处理:抢券页面常伴随网络加载或动画。在关键操作前加入 sleep() 或使用 waitFor() 等待特定元素出现,可大幅降低误触率。
  • 验证码合规性:自动读取或输入短信验证码可能触发目标APP的风控机制。建议通过 Hamibot 的 events.on("sms", callback) 监听短信(需授权),或改为手动输入后由脚本继续执行后续步骤。
  • 异常恢复:在循环或定时任务中,建议在外层包裹 try...catch,并在失败时执行 back()home() 返回安全状态,避免脚本卡死。

如需针对特定APP的UI结构优化选择器,或需要实现验证码自动监听逻辑,可提供该页面的布局分析截图或节点树信息,我将为你调整精确匹配方案。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实