第一步点击播放“◀”按钮, 延迟为一秒,检测有没有“继续”按钮,有则点击继续,无则执行下一步。
延迟一秒,第二步识别到右边屏幕有按键消失,点击左上角返回“<″按键,延迟一秒,识别“下一节”按键。
延迟一秒,第三步滑动至屏幕最下面, 识别“下一章节”,点击“下一章节”,延迟五秒。

HAMI_1573765277 · 5 小时前

回答

Hamibot AI
1
· 5 小时前

以下是为你编写的 Hamibot 自动化脚本。代码已严格适配 Rhino 1.7.15 引擎(无箭头函数、无默认参数),并加入了控件定位容错与执行稳定性处理。

// 文档地址 https://docs.hamibot.com/
// 建议根据你设计脚本时的手机分辨率修改此处参数,实现坐标自动放缩
setScreenMetrics(1080, 1920);

// 安全点击辅助函数:优先尝试控件点击,失败则尝试坐标点击
function safeClick(selector, x, y) {
    var target = selector.findOnce();
    if (target) {
        if (target.click()) {
            return true;
        }
        // 部分控件 clickable 为 false,尝试点击其中心坐标
        var bounds = target.bounds();
        click(bounds.centerX(), bounds.centerY());
        return true;
    }
    // 控件未找到时 fallback 到坐标点击
    if (x && y) {
        click(x, y);
        return true;
    }
    return false;
}

function main() {
    // ================= 第一步 =================
    log("第一步:点击播放按钮 ◀");
    safeClick(text("◀"), 150, 960); // 坐标为备用值,请按实际调整
    sleep(1000);

    // 检测“继续”按钮
    if (text("继续").exists()) {
        log("检测到继续按钮,执行点击");
        safeClick(text("继续"));
        sleep(1000);
    } else {
        log("未检测到继续按钮,跳过");
    }

    sleep(1000);

    // ================= 第二步 =================
    log("第二步:等待右侧按键消失");
    // 请将 "右侧按键文本" 替换为实际右侧按钮的 text 或 desc
    var rightBtn = "右侧按键文本";
    var waitCount = 0;
    var maxWait = 20; // 最多等待 10 秒 (20 * 500ms)
    while (text(rightBtn).exists() && waitCount < maxWait) {
        sleep(500);
        waitCount++;
    }
    log("右侧按键已消失或等待超时");

    log("点击左上角返回 < 按键");
    safeClick(text("<"), 80, 120);
    sleep(1000);

    // 识别“下一节”按键
    if (text("下一节").exists()) {
        log("已识别到下一节按钮");
    } else {
        log("未识别到下一节按钮,请检查界面状态");
    }

    sleep(1000);

    // ================= 第三步 =================
    log("第三步:滑动至屏幕最下方");
    // scrollDown() 会自动寻找面积最大的可滑动控件进行下滑
    for (var i = 0; i < 6; i++) {
        scrollDown();
        sleep(300);
    }

    log("识别并点击下一章节");
    if (text("下一章节").exists()) {
        safeClick(text("下一章节"));
    } else {
        log("未找到下一章节按钮");
    }
    sleep(5000);

    log("全流程执行完毕");
}

main();

关键说明与最佳实践

  1. 控件定位准确性

    • 脚本中的 text("◀")text("继续") 等依赖界面实际文本。不同应用或系统语言可能导致文本差异。
    • 强烈建议在 Hamibot 控制台使用 「布局分析」「设备调试」 功能,抓取目标控件的 textdescid,并替换脚本中的选择器。
  2. 右侧按键消失检测逻辑

    • 自动化无法直接“感知”消失动作,通常采用 轮询检测:持续判断该控件是否还存在,直到 exists() 返回 false 或达到超时时间。
    • 请将代码中的 "右侧按键文本" 替换为实际右侧按钮的标识。如果该按钮没有 text,可改用 desc("xxx")id("xxx")
  3. 滑动与坐标适配

    • scrollDown() 会默认寻找屏幕上面积最大的可滑动区域执行下滑,适用于绝大多数列表或网页。
    • 脚本开头已加入 setScreenMetrics(1080, 1920)。当 fallback 到坐标点击时,Hamibot 会根据你运行设备的实际分辨率自动换算坐标,避免多机型错位。
  4. 稳定性优化

    • 使用 safeClick 封装了点击逻辑:优先调用控件 .click(),若控件 clickablefalse 则自动计算中心坐标点击,最后 fallback 到预设坐标。这能显著提升复杂 UI 下的点击成功率。
    • 所有 sleep() 均按你的要求设置。若网络或页面加载较慢,可适当延长等待时间或改用 waitFor() 系列函数。

如需针对特定 APP 的控件结构进行精准适配,你可以提供布局分析抓取的控件属性(id/text/desc/bounds),我会为你进一步优化选择器与执行逻辑。

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