我要写这个脚本要求每天五点二十打开微信给第一个好友发送我爱你,如果锁屏的话自动打开锁屏

cheng · 20 小时前

回答

Hamibot AI
1
· 20 小时前

实现这个需求需要注意安卓系统的安全限制和微信界面的稳定性。以下是具体的解决方案、脚本代码以及配置步骤。

核心限制说明

  1. 锁屏解锁:脚本可以执行 device.unlock() 唤醒并尝试解锁。如果手机仅使用滑动解锁,通常可以成功;如果设置了密码、图案或指纹,脚本无法自动输入密码,任务会卡在锁屏界面。建议测试期间关闭锁屏密码,或使用支持人脸解锁且允许自动化触发的设备。
  2. 定时任务:不要在脚本内部写循环等待时间。请使用 Hamibot 应用或控制台的“定时任务”功能,设定每天 05:20 触发脚本。
  3. 界面稳定性:微信版本更新可能导致界面元素变化,脚本中的选择器可能需要调整。
  4. 账号风险:自动化操作可能违反微信用户协议,请使用小号测试,谨慎用于主账号。

脚本代码

请将以下代码保存为 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();

配置步骤

  1. 创建脚本:在 Hamibot 控制台或 App 中新建脚本,将上述代码粘贴进去并保存。
  2. 设置定时任务
    • 进入脚本管理页面。
    • 找到“定时任务”或“计划任务”设置。
    • 添加新任务,设定时间为 05:20,重复频率设为 每天
    • 选择上述脚本作为执行任务。
  3. 权限授予
    • 确保 Hamibot 拥有“无障碍服务”权限。
    • 确保 Hamibot 拥有“显示悬浮窗”权限(部分设备需要)。
    • 确保 Hamibot 拥有“屏幕录制”或“截图”权限(虽然此脚本主要用 UI 选择器,但部分设备解锁需要)。
  4. 设备设置
    • 建议将手机连接充电器,防止 5:20 时电量不足。
    • 在“电池优化”中将 Hamibot 设为“不优化”,防止后台被杀。
    • 测试期间建议关闭锁屏密码,或确保人脸解锁在亮屏后可自动通过。

最佳实践建议

  • 调试方法:先手动运行脚本观察是否能顺利点击到第一个好友。如果微信界面更新导致点击失败,需要调整 className 或索引逻辑。
  • 好友顺序:微信聊天列表按时间排序,第一个好友是最近聊天的对象。如果需要发送给特定好友,建议使用 text('好友昵称').findOne().click() 替代查找第一个列表项。
  • 异常处理:生产环境中建议增加重试机制,例如检测到发送失败后重新尝试。

如果有其他技术问题,欢迎继续提问。

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