回答
实现这个需求需要注意安卓系统的安全限制和微信界面的稳定性。以下是具体的解决方案、脚本代码以及配置步骤。
核心限制说明
- 锁屏解锁:脚本可以执行
device.unlock()唤醒并尝试解锁。如果手机仅使用滑动解锁,通常可以成功;如果设置了密码、图案或指纹,脚本无法自动输入密码,任务会卡在锁屏界面。建议测试期间关闭锁屏密码,或使用支持人脸解锁且允许自动化触发的设备。 - 定时任务:不要在脚本内部写循环等待时间。请使用 Hamibot 应用或控制台的“定时任务”功能,设定每天 05:20 触发脚本。
- 界面稳定性:微信版本更新可能导致界面元素变化,脚本中的选择器可能需要调整。
- 账号风险:自动化操作可能违反微信用户协议,请使用小号测试,谨慎用于主账号。
脚本代码
请将以下代码保存为 index.js。代码已适配 Rhino 1.7.15 引擎,禁用箭头函数和默认参数。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
// 唤醒屏幕
device.wakeUp();
// 尝试解锁屏幕(若有密码锁可能无效)
device.unlock();
sleep(2000);
// 打开微信
app.openApp('com.tencent.mm');
// 等待微信加载进入主界面
sleep(5000);
// 确保当前在微信主界面,如果不在则尝试返回
if (!text('微信').exists()) {
back();
sleep(1000);
}
// 查找第一个好友会话列表项
// 注意:微信界面结构复杂,索引可能随版本变化,此处选取常见结构
var chatList = className('android.widget.RelativeLayout').find();
var targetItem = null;
// 跳过顶部搜索栏等非聊天项,通常索引 1 或 2 开始是聊天列表
for (var i = 1; i < chatList.length; i++) {
if (chatList[i].bounds().centerX() > 0) {
targetItem = chatList[i];
break;
}
}
if (targetItem) {
targetItem.click();
sleep(1000);
// 输入文字
setText('我爱你');
sleep(500);
// 点击发送按钮
var sendBtn = className('android.widget.Button').text('发送').findOne();
if (sendBtn) {
sendBtn.click();
toastLog('发送成功');
} else {
toastLog('未找到发送按钮');
}
} else {
toastLog('未找到好友列表');
}
// 脚本结束
hamibot.exit();
配置步骤
- 创建脚本:在 Hamibot 控制台或 App 中新建脚本,将上述代码粘贴进去并保存。
- 设置定时任务:
- 进入脚本管理页面。
- 找到“定时任务”或“计划任务”设置。
- 添加新任务,设定时间为
05:20,重复频率设为每天。 - 选择上述脚本作为执行任务。
- 权限授予:
- 确保 Hamibot 拥有“无障碍服务”权限。
- 确保 Hamibot 拥有“显示悬浮窗”权限(部分设备需要)。
- 确保 Hamibot 拥有“屏幕录制”或“截图”权限(虽然此脚本主要用 UI 选择器,但部分设备解锁需要)。
- 设备设置:
- 建议将手机连接充电器,防止 5:20 时电量不足。
- 在“电池优化”中将 Hamibot 设为“不优化”,防止后台被杀。
- 测试期间建议关闭锁屏密码,或确保人脸解锁在亮屏后可自动通过。
最佳实践建议
- 调试方法:先手动运行脚本观察是否能顺利点击到第一个好友。如果微信界面更新导致点击失败,需要调整
className或索引逻辑。 - 好友顺序:微信聊天列表按时间排序,第一个好友是最近聊天的对象。如果需要发送给特定好友,建议使用
text('好友昵称').findOne().click()替代查找第一个列表项。 - 异常处理:生产环境中建议增加重试机制,例如检测到发送失败后重新尝试。
如果有其他技术问题,欢迎继续提问。
ℹ️ 本回答由 AI 生成,内容仅供参考