var KuaiShou = "快手极速版" //应用名称
if (StartApp(KuaiShou,1000) == false){
toastLog("手机上找不到App:" + KuaiShou) //手机提示框
hamibot.exit(); //找不到退出应用
}

//打开应用
function StartApp(AppName,STime){
var isHaveApp = false
isHaveApp = launchApp(AppName) //打开应用
if (isHaveApp) {
log("打开应用:" + AppName)
log("等待应用加载中...")
//点过广告
var skip = textContains("跳过").findOne(4000)
if(skip !== null){
log("发现应用启动广告,点击跳过")
ClickBtn(skip) //调用点击控件函数
}
if (STime !== undefined && STime > 0 ){
sleep(STime) //等待应用加载
}
}

return isHaveApp
}

//点击控件
function ClickBtn(btn) {
if (btn !== null) { //判断控件是否存在
var b = btn.bounds(); //获取控件范围
if (b.centerX() > 0 && b.centerY() > 0) { //控件在屏幕上才能点击
click(b.centerX(), b.centerY()); //click(x,y) 点击x y位置
}

HAMI_9644386970 · 6 小时前

回答

Hamibot AI
1
· 6 小时前

Hamibot脚本问题分析与修正

你提供的脚本有几个关键问题需要修正,以下是详细分析和改进方案:

主要问题

  1. 应用启动方式错误launchApp("快手极速版") 无法通过应用名称启动应用,Hamibot需要应用包名
  2. 函数结构不完整ClickBtn函数缺少闭合括号
  3. 缺少必要检查:没有检查无障碍服务状态
  4. 兼容性问题:代码未考虑Rhino 1.7.15引擎限制

修正后的完整脚本

// 文档地址 https://docs.hamibot.com/
var KuaiShou = "快手极速版"; // 应用名称

// 检查无障碍服务
if (!auto.service) {
toastLog("请先开启无障碍服务");
auto.waitFor();
}

// 获取应用包名并启动
var packageName = getPackageName(KuaiShou);
if (!packageName) {
toastLog("找不到应用: " + KuaiShou);
hamibot.exit();
}

if (StartApp(packageName, 1000) == false) {
toastLog("无法启动应用: " + KuaiShou);
hamibot.exit();
}

// 打开应用
function StartApp(packageName, STime) {
var isHaveApp = launch(packageName);
if (isHaveApp) {
log("打开应用包名: " + packageName);
log("等待应用加载中...");

    // 点过广告
    var skip = textContains("跳过").findOne(4000);
    if (skip !== null) {
        log("发现应用启动广告,点击跳过");
        ClickBtn(skip);
    }
    
    if (STime !== undefined && STime > 0) {
        sleep(STime);
    }
}
return isHaveApp;

}

// 点击控件
function ClickBtn(btn) {
if (btn !== null) {
var b = btn.bounds();
if (b.centerX() > 0 && b.centerY() > 0) {
click(b.centerX(), b.centerY());
return true;
}
}
return false;
}

关键改进说明

  1. 正确获取应用包名

    • 使用getPackageName("快手极速版")代替直接使用应用名称
    • 通过包名启动应用是Hamibot的标准做法
  2. 添加无障碍服务检查

    • 所有UI操作前必须确保无障碍服务已启用
    • if (!auto.service) { auto.waitFor(); } 确保脚本安全运行
  3. 修复函数结构

    • 补全了ClickBtn函数的闭合括号
    • 增加了点击操作的返回值,便于调试
  4. 使用正确API

    • launch(packageName) 替代可能不存在的launchApp
    • 使用标准的UI选择器textContains("跳过").findOne(4000)

最佳实践建议

  1. 添加异常处理:在关键操作处添加try-catch块

    try {
        // 可能出错的操作
    } catch (e) {
        log("错误: " + e);
        hamibot.exit();
    }
    
  2. 增加超时机制:避免脚本无限等待

    var startTime = Date.now();
    while (Date.now() - startTime < 10000) { // 10秒超时
        if (text("首页").exists()) break;
        sleep(500);
    }
    
  3. 使用更可靠的元素定位

    // 优先使用ID定位,更稳定
    var skip = id("com.smile.gifmaker:id/ksad_skip_button").findOne(3000);
    // 备用方案
    if (!skip) skip = textContains("跳过").findOne(3000);
    
  4. 增加设备兼容性处理

    // 处理不同设备的屏幕适配
    var deviceWidth = device.width;
    var deviceHeight = device.height;
    if (deviceWidth < 720) {
        // 小屏幕设备特殊处理
    }
    

这个修正后的脚本应该能更稳定地在Hamibot中运行,正确启动快手极速版并处理启动广告。如果仍有问题,建议先通过app.getInstalledApps()确认应用包名是否正确。

ℹ️ 本回答由 AI 生成,内容仅供参考