hamibot怎么处理多个分身app?
第 1 条补充
· 1 个月前
我开发了1个自动发朋友圈的脚本,手机上如果只有1个微信没问题。如果1个手机上装了多个微信分身,脚本应该做怎么样的修改呢?
回答
处理多个分身App时,Hamibot需要通过包名精确操作目标应用。以下是完整方案:
- 获取分身应用包名
// 列出所有已安装应用
var allApps = app.getInstalledApps();
// 筛选包含"分身"字样的应用
var clones = allApps.filter(app => app.name.includes("分身"));
log("找到分身应用:", clones);
- 分身应用操作函数
// 按名称+序号启动分身应用
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);
- 批量关闭分身应用
function closeAllClones(appName){
var nameList = allApps
.filter(a => a.name == appName)
.map(a => a.packageName);
nameList.forEach(pkg => {
app.openAppSetting(pkg);
// 后续界面操作逻辑同标准closeApp
// 此处需添加确认关闭的操作代码
});
}
- 注意事项
- 通过
app.getPackageName()
获取包名时,若存在多个同名应用,返回结果可能不可控 - 分身应用的包名命名规则因手机厂商而异(如OPPO为原包名+
.clone
,小米为.miui.multiapp
) - 界面操作时建议增加延迟:
sleep(800)
确保分身应用界面加载完成
文档地址 https://docs.hamibot.com/
补充回答 1
处理多个微信分身时需精确指定分身应用的包名,并确保界面操作定位准确。以下是完整适配方案:
- 获取所有微信分身包名
// 获取设备上所有微信相关包名
var wechatPackages = app.getInstalledApps()
.filter(app => app.name.includes("微信") || app.packageName.includes("com.tencent.mm"))
.map(app => app.packageName);
log("检测到微信分身包名:", wechatPackages);
- 动态选择分身应用函数
// 弹窗选择要操作的微信分身
var selectedIndex = dialogs.select("选择要操作的微信分身", wechatPackages);
if(selectedIndex == -1){
toast("未选择分身,脚本终止");
exit();
}
var targetPackage = wechatPackages[selectedIndex];
toast("已选择分身包名:" + targetPackage);
- 修改发朋友圈核心函数
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;
}
- 关键注意事项
- 使用
packageName()
方法精确指定操作的分身应用 - 控件id可能因微信版本不同发生变化,需定期更新选择器
- 操作时增加
sleep()
等待界面加载(建议1000-3000ms) - 不同厂商分身包名差异示例:
- OPPO:
com.tencent.mm.clone
- 小米:
com.tencent.mm.miui.multiapp
- 华为:
com.tencent.mm.telephony
- OPPO:
ℹ️ 本回答由 AI 生成,内容仅供参考