hamibot怎么处理多个分身app?

已存档
4j7n7anm03 · 1 个月前
第 1 条补充
·
1 个月前

我开发了1个自动发朋友圈的脚本,手机上如果只有1个微信没问题。如果1个手机上装了多个微信分身,脚本应该做怎么样的修改呢?

回答

Hamibot AI
1
· 1 个月前

处理多个分身App时,Hamibot需要通过包名精确操作目标应用。以下是完整方案:

  1. 获取分身应用包名
// 列出所有已安装应用
var allApps = app.getInstalledApps();
// 筛选包含"分身"字样的应用
var clones = allApps.filter(app => app.name.includes("分身"));
log("找到分身应用:", clones);
  1. 分身应用操作函数
// 按名称+序号启动分身应用
function launchClone(appName, index=0){
    var nameList = allApps
        .filter(a => a.name == appName)
        .map(a => a.packageName);
    if(!nameList.length) return false;
    return app.launch(nameList[index]);
}

// 示例:启动第2个微信分身
launchClone("微信", 1);
  1. 批量关闭分身应用
function closeAllClones(appName){
    var nameList = allApps
        .filter(a => a.name == appName)
        .map(a => a.packageName);
    
    nameList.forEach(pkg => {
        app.openAppSetting(pkg);
        // 后续界面操作逻辑同标准closeApp
        // 此处需添加确认关闭的操作代码
    });
}
  1. 注意事项
  • 通过app.getPackageName()获取包名时,若存在多个同名应用,返回结果可能不可控
  • 分身应用的包名命名规则因手机厂商而异(如OPPO为原包名+.clone,小米为.miui.multiapp
  • 界面操作时建议增加延迟:sleep(800)确保分身应用界面加载完成

文档地址 https://docs.hamibot.com/


补充回答 1

处理多个微信分身时需精确指定分身应用的包名,并确保界面操作定位准确。以下是完整适配方案:

  1. 获取所有微信分身包名
// 获取设备上所有微信相关包名
var wechatPackages = app.getInstalledApps()
    .filter(app => app.name.includes("微信") || app.packageName.includes("com.tencent.mm"))
    .map(app => app.packageName);

log("检测到微信分身包名:", wechatPackages);
  1. 动态选择分身应用函数
// 弹窗选择要操作的微信分身
var selectedIndex = dialogs.select("选择要操作的微信分身", wechatPackages);
if(selectedIndex == -1){
    toast("未选择分身,脚本终止");
    exit();
}

var targetPackage = wechatPackages[selectedIndex];
toast("已选择分身包名:" + targetPackage);
  1. 修改发朋友圈核心函数
function postToMoments(message, imagePath){
    // 启动指定分身
    app.launch(targetPackage);
    sleep(2000);
    
    // 点击底部「动态」tab
    var dynamicTab = text("动态").packageName(targetPackage).findOne(5000);
    if(!dynamicTab){
        toast("未找到动态Tab,可能未在微信主界面");
        return false;
    }
    dynamicTab.click();
    sleep(1000);
    
    // 点击「+」按钮
    var plusBtn = id("com.tencent.mm:id/cqb").packageName(targetPackage).findOne(3000);
    if(plusBtn){
        plusBtn.click();
        sleep(1000);
        
        // 填写内容
        var input = id("com.tencent.mm:id/d6x").packageName(targetPackage).findOne(3000);
        input.setText(message);
        
        // 附加图片(如需要)
        if(imagePath && files.exists(imagePath)){
            // 添加图片逻辑...
        }
        
        // 点击发布
        var publishBtn = text("发布").packageName(targetPackage).findOne(3000);
        if(publishBtn){
            publishBtn.click();
            toast("发布成功");
            return true;
        }
    }
    return false;
}
  1. 关键注意事项
  • 使用packageName()方法精确指定操作的分身应用
  • 控件id可能因微信版本不同发生变化,需定期更新选择器
  • 操作时增加sleep()等待界面加载(建议1000-3000ms)
  • 不同厂商分身包名差异示例:
    • OPPO:com.tencent.mm.clone
    • 小米:com.tencent.mm.miui.multiapp
    • 华为:com.tencent.mm.telephony

文档地址 https://docs.hamibot.com/

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