|
|
示例代理模式agent小红书自动发文
- // AIWROK 完整自动化流程:启动小红书 → 点击加号 → 选择文字 → 自动发文
- // 代理模式agent小红书自动发文神器
- // 包名:com.xingin.xhs(小红书)
- print.log("===== 小红书自动发文流程启动 =====");
- print.time();
- // ========== 配置区 ==========
- var APP包名 = "com.xingin.xhs";
- // 循环配置
- var 循环次数 = 3; // 设置循环次数,0表示无限循环
- var 当前循环 = 0;
- // 发布内容数组(可以设置多条不同内容)
- var 发布内容列表 = [
- "无聊,就发一发想法看看有什么好玩的。",
- "今天天气不错,分享一个日常~",
- "记录生活中的小美好 ✨"
- ];
- var 内容索引 = 0;
- // 底部加号按钮
- var 加号按钮X = 0.5;
- var 加号按钮Y = 0.965;
- // "写文字"选项按钮
- var 文字选项X = 0.5;
- var 文字选项Y = 0.8578;
- // "下一步"按钮(第一个下一步,进入预览页)
- var 下一步按钮X = 0.5;
- var 下一步按钮Y = 0.95;
- // "下一步"按钮(第二个下一步,从预览页进入编辑页)
- var 预览下一步X = 0.85;
- var 预览下一步Y = 0.95;
- // "发布笔记"按钮(最终发布)
- // 红色大按钮,在屏幕底部
- var 发布按钮X = 0.5;
- var 发布按钮Y = 0.91;
- // 文本输入框 (根据XML bounds="[406,1107][1755,2820]")
- var 输入框X = 0.5;
- var 输入框Y = 0.5113;
- // ========== 获取设备信息 ==========
- var 屏幕宽 = screen.getScreenWidth();
- var 屏幕高 = screen.getScreenHeight();
- print.log("屏幕尺寸:" + 屏幕宽 + " x " + 屏幕高);
- print.log("代理状态:" + (agent.isOpen() ? "已开启" : "未开启"));
- // ========================================
- // 主循环开始
- // ========================================
- for (当前循环 = 1; 循环次数 == 0 || 当前循环 <= 循环次数; 当前循环++) {
- if (循环次数 > 0) {
- print.log("\n======================================");
- print.log("===== 第 " + 当前循环 + " / " + 循环次数 + " 次循环 =====");
- print.log("======================================");
- } else {
- print.log("\n======================================");
- print.log("===== 第 " + 当前循环 + " 次循环(无限模式)=====");
- print.log("======================================");
- }
-
- // 获取当前要发布的内容
- var 发布内容 = 发布内容列表[内容索引 % 发布内容列表.length];
- 内容索引++;
-
- print.log("本次发布内容:" + 发布内容);
-
- // ========================================
- // 步骤1:启动小红书
- // ========================================
- print.log("\n========== 步骤1:启动小红书 ==========");
- try {
- app.openApp(APP包名);
- print.log("✓ 已启动小红书");
- } catch (e) {
- print.log(" 启动失败:" + e.message);
- }
- sleep.second(秒 = 5);
- // ========================================
- // 步骤2:点击底部加号按钮
- // ========================================
- print.log("\n========== 步骤2:点击加号按钮 ==========");
- try {
- agent.clickPercent(加号按钮X, 加号按钮Y);
- print.log("✓ 已点击加号按钮");
- } catch (e) {
- print.log("⚠ 点击加号失败:" + e.message);
- }
- sleep.second(秒 = 2);
- // ========================================
- // 步骤3:选择"文字"选项
- // ========================================
- print.log("\n========== 步骤3:选择文字选项 ==========");
- try {
- agent.clickPercent(文字选项X, 文字选项Y);
- print.log("✓ 已选择文字选项");
- } catch (e) {
- print.log("⚠ 选择文字选项失败:" + e.message);
- }
- sleep.second(秒 = 2);
- // ========================================
- // 步骤4:输入内容
- // ========================================
- print.log("\n========== 步骤4:输入内容 ==========");
- var 发布内容 = "无聊,就发一发想法看看有什么好玩的。";
- print.log("准备输入内容:" + 发布内容);
- // 计算输入框像素坐标
- var 输入框像素X = Math.floor(输入框X * 屏幕宽);
- var 输入框像素Y = Math.floor(输入框Y * 屏幕高);
- // ---- 第1步:点击输入框获取焦点 ----
- agent.click(输入框像素X, 输入框像素Y);
- sleep.second(秒 = 1);
- // ---- 第2步:设置剪贴板(双保险) ----
- agent.shell("service call clipboard 4 i32 1 s16 '" + 发布内容 + "' i32 0");
- sleep.millisecond(毫秒 = 300);
- agent.shell("service call clipboard 3 i32 1 s16 '" + 发布内容 + "' i32 0");
- sleep.millisecond(毫秒 = 300);
- Clipboard.copy(发布内容);
- sleep.millisecond(毫秒 = 300);
- // ---- 第3步:粘贴内容(尝试多种方式) ----
- var 粘贴成功 = false;
- // 方式A:KEYCODE_PASTE (279)
- agent.shell("input keyevent 279");
- sleep.second(秒 = 1);
- var xmlA = agent.shell("uiautomator dump --compressed /proc/self/fd/1 2>/dev/null");
- if (xmlA.indexOf("无聊") !== -1 || xmlA.indexOf("想法") !== -1) {
- 粘贴成功 = true;
- print.log("✓ KEYCODE_PASTE 粘贴成功");
- }
- // 方式B:Ctrl+V
- if (!粘贴成功) {
- agent.shell("input keyevent 50 --meta 0x1000");
- sleep.second(秒 = 1);
- var xmlB = agent.shell("uiautomator dump --compressed /proc/self/fd/1 2>/dev/null");
- if (xmlB.indexOf("无聊") !== -1 || xmlB.indexOf("想法") !== -1) {
- 粘贴成功 = true;
- print.log("✓ Ctrl+V 粘贴成功");
- }
- }
- // 方式C:长按 + 查找粘贴按钮
- if (!粘贴成功) {
- var 长按命令 = "input swipe " + 输入框像素X + " " + 输入框像素Y + " " + (输入框像素X + 1) + " " + (输入框像素Y + 1) + " 2000";
- agent.shell(长按命令);
- sleep.second(秒 = 2);
-
- var xmlC = agent.shell("uiautomator dump --compressed /proc/self/fd/1 2>/dev/null");
- var 关键词 = ["粘贴", "Paste", "paste"];
- for (var i = 0; i < 关键词.length; i++) {
- if (xmlC.indexOf(关键词[i]) !== -1) {
- var 后面 = xmlC.substring(xmlC.indexOf(关键词[i]));
- var m = 后面.match(/bounds="\[(\d+),(\d+)\]\[(\d+),(\d+)\]"/);
- if (m) {
- var cx = (parseInt(m[1]) + parseInt(m[3])) / 2;
- var cy = (parseInt(m[2]) + parseInt(m[4])) / 2;
- agent.click(cx, cy);
- 粘贴成功 = true;
- print.log("✓ 长按粘贴成功");
- break;
- }
- }
- }
- }
- if (!粘贴成功) {
- print.log("✗ 所有粘贴方式均未成功");
- }
- // ========================================
- // 步骤5:点击"下一步"(进入预览页)
- // ========================================
- print.log("\n========== 步骤5:点击下一步 ==========");
- try {
- agent.clickPercent(下一步按钮X, 下一步按钮Y);
- print.log("✓ 已点击下一步按钮");
- } catch (e) {
- print.log("⚠ 点击下一步失败:" + e.message);
- }
- sleep.second(秒 = 5);
- // ========================================
- // 步骤6:点击预览页的"下一步"(进入编辑页)
- // ========================================
- print.log("\n========== 步骤6:点击预览页下一步 ==========");
- try {
- agent.clickPercent(预览下一步X, 预览下一步Y);
- print.log("✓ 已点击预览页下一步按钮");
- } catch (e) {
- print.log("⚠ 点击预览页下一步失败:" + e.message);
- }
- sleep.second(秒 = 2);
- // ========================================
- // 步骤7:点击"发布笔记"(最终发布)
- // ========================================
- print.log("\n========== 步骤7:点击发布笔记 ==========");
- try {
- agent.clickPercent(发布按钮X, 发布按钮Y);
- print.log("✓ 已点击发布笔记按钮");
- } catch (e) {
- print.log(" 点击发布笔记失败:" + e.message);
- }
- sleep.second(秒 = 3);
-
- // ========================================
- // 循环间隔(最后一次不等待)
- // ========================================
- if (循环次数 == 0 || 当前循环 < 循环次数) {
- print.log("\n========== 等待下一次循环 ==========");
- sleep.second(秒 = 5);
- }
- }
- // ========================================
- // 结果汇总
- // ========================================
- print.timeEnd();
- print.log("\n======================================");
- print.log("===== 所有循环执行完成 =====");
- if (循环次数 > 0) {
- print.log("总计执行:" + 循环次数 + " 次");
- } else {
- print.log("无限循环模式,已执行:" + (当前循环 - 1) + " 次");
- }
- print.log("======================================");
复制代码
|
|