30行代码实现浪漫:用auto.js自动发送早安问候
一、技术选型与场景分析
在移动端自动化领域,auto.js凭借其无障碍服务API和JavaScript脚本支持,成为实现UI自动化的理想工具。相比传统ADB命令或图像识别方案,auto.js具有三大优势:1)无需root权限即可操作系统级控件;2)支持跨应用自动化;3)开发效率高,30行代码即可实现完整功能。
典型应用场景
- 情侣关怀:定时发送个性化问候,提升情感温度
- 工作提醒:自动发送日报/周报提醒
- 社交运营:批量处理社交平台的定时发布需求
- 老年关怀:为父母设置自动健康提醒
二、核心代码实现与解析
以下代码已在auto.js 4.1.1版本验证通过,完整实现微信消息发送功能:
// 配置参数区const config = {targetName: "宝贝", // 微信联系人昵称message: "早安呀!今天也要元气满满哦~☀️", // 发送内容sendTime: "07:30", // 发送时间(24小时制)checkInterval: 60000 // 检查时间间隔(毫秒)};// 主函数function main() {devices.setMusicEnabled(false); // 关闭音效console.show(); // 显示控制台// 定时检查机制setInterval(() => {const now = new Date();const [hours, minutes] = config.sendTime.split(":");const targetTime = new Date();targetTime.setHours(hours, minutes, 0, 0);// 时间匹配逻辑if (now.getHours() === parseInt(hours) &&now.getMinutes() === parseInt(minutes)) {sendWechatMessage();}}, config.checkInterval);console.log("早安机器人已启动,等待发送时间...");}// 微信发送函数function sendWechatMessage() {// 启动微信if (!app.isInstalled("com.tencent.mm")) {toast("微信未安装");return;}app.launch("com.tencent.mm");// 等待微信启动sleep(3000);// 搜索联系人(简化版,实际需根据UI结构调整)id("com.tencent.mm:id/bhn").findOne(10000)?.click(); // 搜索框sleep(1000);setText(config.targetName);sleep(2000);// 点击目标联系人(需根据实际UI调整)const target = textContains(config.targetName).findOne(5000);if (target) {target.parent().click();sleep(2000);// 输入并发送消息id("com.tencent.mm:id/aj_").findOne(2000)?.click();sleep(500);setText(config.message);sleep(500);id("com.tencent.mm:id/ajf").findOne(1000)?.click(); // 发送按钮console.log("消息已发送: " + new Date().toLocaleString());} else {console.error("未找到联系人: " + config.targetName);}}// 启动程序main();
代码关键点解析
- 时间控制机制:采用
setInterval实现每分钟检查一次当前时间,精确到分钟级触发 - UI自动化策略:通过控件ID(如
com.tencent.mm:id/bhn)定位元素,比图像识别更稳定 - 异常处理:包含微信未安装、联系人未找到等场景的容错处理
- 性能优化:设置合理的sleep时间避免操作过快导致失败
三、进阶优化方案
1. 多平台适配方案
// 跨平台发送函数示例function sendMessage(platform, config) {switch(platform) {case "wechat":// 微信发送逻辑break;case "qq":// QQ发送逻辑break;case "sms":// 短信发送逻辑break;}}
2. 动态内容生成
// 结合天气API的动态消息function getWeatherMessage() {const url = "https://api.example.com/weather";const res = http.get(url);const weather = JSON.parse(res.body).weather;return `早安!今日${weather},记得带伞哦~`;}
3. 分布式执行方案
对于需要多设备执行的场景,可通过HTTP服务实现控制:
// 创建简单的HTTP控制接口function startHttpServer() {const server = http.createServer();server.listen(8080, () => {console.log("HTTP服务器启动于8080端口");});server.on("request", (req, res) => {if (req.url === "/send") {sendWechatMessage();res.write("消息已发送");}res.end();});}
四、部署与运维指南
1. 设备要求
- Android 7.0+系统
- auto.js 4.1.1+版本
- 开启”无障碍服务”权限
- 保持设备常亮(可通过
device.keepScreenOn()实现)
2. 定时任务配置
推荐使用系统自带的任务计划程序:
- 创建BAT脚本:
@echo offadb shell am start -n org.autojs.autojs/.MainActivityadb shell input keyevent 66 # 模拟回车键
- 在Windows任务计划程序中设置每天7:25触发
3. 日志监控系统
// 增强版日志记录function logMessage(type, content) {const timestamp = new Date().toISOString();const logEntry = `[${timestamp}] [${type}] ${content}\n`;// 写入文件files.write("/sdcard/autojs_log.txt", logEntry, {append: true});// 可选:上传到服务器// http.post("https://api.example.com/log", {log: logEntry});}
五、安全与隐私考量
-
权限管理:
- 仅申请必要的无障碍权限
- 避免获取通讯录等敏感权限
- 代码中不存储明文密码
-
数据加密:
// 简单的AES加密示例const CryptoJS = require("crypto-js");const secretKey = "your-secret-key";function encrypt(text) {return CryptoJS.AES.encrypt(text, secretKey).toString();}function decrypt(ciphertext) {const bytes = CryptoJS.AES.decrypt(ciphertext, secretKey);return bytes.toString(CryptoJS.enc.Utf8);}
-
异常监控:
- 设置心跳检测机制
- 关键操作前进行设备状态检查
- 实现自动重启功能
六、扩展应用场景
- 生日惊喜:结合日历API实现生日自动祝福
- 纪念日提醒:通过计算日期差实现倒计时提醒
- 健康管理:定时发送饮水提醒、步数目标等
- 学习监督:为备考伴侣发送每日学习计划
七、常见问题解决方案
-
微信版本升级导致失效:
- 定期检查控件ID变化
- 使用
ui.selector()的弹性选择器 - 维护不同版本的控件映射表
-
设备休眠导致中断:
// 保持设备唤醒device.keepScreenOn(3600000); // 保持1小时唤醒
-
多设备同步问题:
- 采用主从架构设计
- 使用WebSocket实现实时通信
- 通过云端配置中心统一管理
八、技术演进方向
- AI集成:结合NLP模型实现消息内容智能生成
- 跨平台框架:迁移至更稳定的AutoX.js
- 低代码平台:开发可视化配置界面
- 区块链应用:将重要纪念日上链存储
通过这30行核心代码,开发者不仅可以实现基础的自动化问候功能,更能以此为起点构建更复杂的移动端自动化系统。实际开发中需注意遵守各平台的使用条款,建议将此类工具用于合法的个人用途,避免用于商业营销等可能违反服务条款的场景。