为什么我打开微信,但是获取不到微信的好友列表?我想选择一个好友,然后点击进入聊天界面,然后输入你好进行发送

HAMI_0770693984 · 5 小时前

回答

Hamibot AI
1
· 5 小时前

获取不到微信好友列表,通常由以下原因导致:

  1. 界面位置错误:微信启动后默认停留在“聊天”页,好友列表实际在“通讯录”标签页中。
  2. 选择器不稳定:你代码中使用的 id()depth() 会随微信版本更新动态混淆或改变,极易失效。
  3. UI未渲染完成:脚本执行速度快于界面加载速度,find() 在节点尚未生成时返回空集合。
  4. 无障碍节点捕获限制:未开启无障碍权限或微信节点未正确暴露,导致无法获取控件树。

下面提供一套稳定可行的实现方案。代码已适配Hamibot使用的Rhino 1.7.15引擎,未使用箭头函数与默认参数,并采用更可靠的选择器策略。

// 文档地址 https://docs.hamibot.com/
auto.waitFor();
launchApp("微信");
sleep(2000);

// 1. 切换到通讯录标签
var contactTab = text("通讯录").findOne(5000);
if (contactTab) {
    contactTab.click();
    sleep(1000);
} else {
    log("未找到通讯录标签,请检查微信界面或无障碍权限");
    exit();
}

// 2. 查找指定好友(替换为你的好友昵称或备注)
var friendName = "张三";
var friendNode = text(friendName).findOne(5000);
if (!friendNode) {
    friendNode = desc(friendName).findOne(3000);
}

if (friendNode) {
    friendNode.click();
    sleep(1500);
} else {
    log("未找到好友:" + friendName + "。若好友不在当前屏幕可见区域,需先滑动列表");
    exit();
}

// 3. 定位输入框并输入内容
var inputBox = className("EditText").findOne(5000);
if (inputBox) {
    inputBox.setText("你好");
    sleep(500);
} else {
    log("未找到输入框");
    exit();
}

// 4. 点击发送按钮
var sendBtn = text("发送").findOne(3000);
if (sendBtn) {
    sendBtn.click();
    log("消息已发送");
} else {
    log("未找到发送按钮");
}

关键说明:

  • 使用 text()desc() 替代 id()/depth(),这是微信自动化中最稳定的定位方式。
  • findOne(timeout) 会阻塞等待节点出现,比 find() 更适合处理UI加载延迟。
  • 微信通讯录为长列表,findOne() 仅能匹配当前屏幕可见节点。若好友不在可视区域,你需要先调用 scrollDown() 或结合 className("ListView")/className("RecyclerView") 进行滑动查找。
  • 输入框使用 className("EditText") 定位,部分微信版本可能需要配合 id() 过滤,建议用Hamibot的“布局分析”工具核对实际属性。

最佳实践建议:

  • 始终在关键操作前加入 sleep()waitFor(),避免UI未渲染完成导致查找失败。
  • 昵称匹配可改用 textContains()descContains() 进行模糊查找,降低因空格或特殊字符导致的匹配失败。
  • 微信对自动化操作有风控策略,建议控制执行频率,点击间隔保持在 500ms 以上,并避免短时间内大量重复操作。
  • 运行前确保已授予Hamibot无障碍权限,并在系统设置中关闭Hamibot的电池优化,防止后台服务被系统回收。

你可以先用Hamibot的布局分析功能抓取当前微信界面的节点树,核对目标控件的 textdescclassName 属性后再微调选择器。提供具体报错或节点信息,我会帮你进一步优化脚本。

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