注册 登录
发贴工具
查看: 1|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] 苹果脚本屏幕事件EVENT示例

[复制链接]

2505

主题

2553

帖子

1万

积分

积分
15216
跳转到指定楼层
楼主
苹果脚本屏幕事件EVENT示例
苹果脚本屏幕事件EVENT示例 群发软件发帖工具

苹果脚本屏幕事件EVENT示例 群发软件发帖工具

苹果脚本屏幕事件EVENT示例 群发软件发帖工具

  1. /**
  2. * ============================================
  3. * AIWROK 屏幕自动化实战案例教学
  4. * 版本:1.0.0
  5. * 平台:iOS (AIWROK)
  6. * QQ 群:711841924 群一,苹果内测群 528816639
  7. * ============================================
  8. *
  9. * 教学目标:
  10. * 1. 📖 掌握 OCR 文本识别与点击
  11. * 2. 🎯 学会找图定位与交互
  12. * 3. 🖱️ 理解多种点击方式的应用场景
  13. * 4. ⚙️ 构建完整的自动化流程
  14. * 5. 🛡️ 错误处理与稳定性优化
  15. */

  16. // ==================== 第一部分:基础准备 ====================

  17. /**
  18. * 工具函数定义
  19. */
  20. function sleep(ms) {
  21.     var start = Date.now();
  22.     while (Date.now() - start < ms) {
  23.         // 阻塞等待
  24.     }
  25. }

  26. function printl(msg) {
  27.     console.log(msg);
  28. }

  29. /**
  30. * 全局配置对象
  31. */
  32. var Config = {
  33.     appName: "屏幕自动化实战教学",
  34.     version: "1.0.0",
  35.     debugMode: true,
  36.     defaultRegion: [0, 0, 1, 1], // 默认全屏
  37.     clickDelay: 500, // 点击延迟 (ms)
  38.     retryTimes: 3, // 默认重试次数
  39.     ocrLockEnabled: false // OCR 锁定开关
  40. };

  41. // ==================== 第二部分:核心技能模块 ====================

  42. /**
  43. * 模块 1: OCR 文本识别基础
  44. */
  45. var OCRModule = {
  46.     /**
  47.      * 任务 1.1: 获取屏幕所有文本
  48.      */
  49.     getAllText: function() {
  50.         printl("\n【任务 1.1】获取屏幕所有文本");
  51.         try {
  52.             // 方式 1: 使用 screen.ocr() (快捷方式)
  53.             var ocrResult = screen.ocr(0, 0, 1, 1);
  54.             var allText = ocrResult.getAllString();
  55.             printl("识别到的文本内容:\n" + allText);
  56.             printl("文本长度:" + allText.length);
  57.             return allText;
  58.         } catch (e) {
  59.             printl("错误:" + e);
  60.             return "";
  61.         }
  62.     },
  63.    
  64.     /**
  65.      * 任务 1.2: 查找特定文本(使用 findIncludeText)
  66.      */
  67.     findText: function(targetText) {
  68.         printl("\n【任务 1.2】查找特定文本:" + targetText);
  69.         try {
  70.             var ocrResult = screen.ocr(0, 0, 1, 1);
  71.             // 使用 findIncludeText 代替 findText
  72.             var detect = ocrResult.findIncludeText(targetText, Config.defaultRegion);
  73.             
  74.             if (detect != null) {
  75.                 printl("✓ 找到目标对象");
  76.                 // 使用 getRect() 获取位置
  77.                 var rect = detect.getRect();
  78.                 printl("位置信息:左=" + rect.getLeft() + ", 上=" + rect.getTop());
  79.                 printl("尺寸信息:宽=" + rect.getWidth() + ", 高=" + rect.getHeight());
  80.                 printl("中心点:(" + rect.getCenterX() + ", " + rect.getCenterY() + ")");
  81.                 return detect;
  82.             } else {
  83.                 printl("✗ 未找到文本:" + targetText);
  84.                 return null;
  85.             }
  86.         } catch (e) {
  87.             printl("错误:" + e);
  88.             return null;
  89.         }
  90.     },
  91.    
  92.     /**
  93.      * 任务 1.3: 查找包含特定文本的多个目标
  94.      */
  95.     findIncludeTexts: function(keyword) {
  96.         printl("\n【任务 1.3】查找包含关键词的所有目标:" + keyword);
  97.         try {
  98.             var ocrResult = screen.ocr(0, 0, 1, 1);
  99.             var targets = ocrResult.findIncludeTexts(keyword, Config.defaultRegion);
  100.             
  101.             if (targets && targets.length > 0) {
  102.                 printl("找到 " + targets.length + " 个包含 '" + keyword + "' 的目标对象");
  103.                 for (var i = 0; i < Math.min(5, targets.length); i++) {
  104.                     var rect = targets[i].getRect();
  105.                     printl("  [" + (i+1) + "] 位置:(" + rect.getCenterX().toFixed(3) + ", " + rect.getCenterY().toFixed(3) + ")");
  106.                 }
  107.                 return targets;
  108.             } else {
  109.                 printl("未找到包含 '" + keyword + "' 的目标");
  110.                 return [];
  111.             }
  112.         } catch (e) {
  113.             printl("错误:" + e);
  114.             return [];
  115.         }
  116.     },
  117.    
  118.     /**
  119.      * 任务 1.4: 使用正则表达式查找
  120.      */
  121.     findWithRegex: function(regex) {
  122.         printl("\n【任务 1.4】使用正则表达式查找:" + regex);
  123.         try {
  124.             var ocrResult = screen.ocr(0, 0, 1, 1);
  125.             var targets = ocrResult.findTextWithRegex(regex, Config.defaultRegion);
  126.             
  127.             if (targets && targets.length > 0) {
  128.                 printl("✓ 找到 " + targets.length + " 个匹配项");
  129.                 for (var i = 0; i < Math.min(3, targets.length); i++) {
  130.                     var rect = targets[i].getRect();
  131.                     printl("  [" + (i+1) + "] 位置:(" + rect.getCenterX().toFixed(3) + ", " + rect.getCenterY().toFixed(3) + ")");
  132.                 }
  133.                 return targets;
  134.             } else {
  135.                 printl("✗ 未找到匹配项");
  136.                 return [];
  137.             }
  138.         } catch (e) {
  139.             printl("错误:" + e);
  140.             return [];
  141.         }
  142.     }
  143. };

  144. /**
  145. * 模块 2: 点击操作核心
  146. */
  147. var ClickModule = {
  148.     /**
  149.      * 任务 2.1: 绝对坐标点击
  150.      */
  151.     clickAbsolute: function(x, y) {
  152.         printl("\n【任务 2.1】绝对坐标点击:(" + x + ", " + y + ")");
  153.         try {
  154.             hid.click(x, y);
  155.             sleep(Config.clickDelay);
  156.             printl("✓ 点击成功");
  157.         } catch (e) {
  158.             printl("错误:" + e);
  159.         }
  160.     },
  161.    
  162.     /**
  163.      * 任务 2.2: 百分比坐标点击
  164.      */
  165.     clickPercent: function(xPercent, yPercent) {
  166.         printl("\n【任务 2.2】百分比坐标点击:(" + xPercent + ", " + yPercent + ")");
  167.         try {
  168.             hid.clickPercent(xPercent, yPercent);
  169.             sleep(Config.clickDelay);
  170.             printl("✓ 点击成功");
  171.         } catch (e) {
  172.             printl("错误:" + e);
  173.         }
  174.     },
  175.    
  176.     /**
  177.      * 任务 2.3: 双击操作
  178.      */
  179.     doubleClick: function(x, y) {
  180.         printl("\n【任务 2.3】双击操作:(" + x + ", " + y + ")");
  181.         try {
  182.             hid.doubleClick(x, y);
  183.             sleep(Config.clickDelay * 2);
  184.             printl("✓ 双击成功");
  185.         } catch (e) {
  186.             printl("错误:" + e);
  187.         }
  188.     },
  189.    
  190.     /**
  191.      * 任务 2.4: 点击 OCR 识别目标
  192.      */
  193.     clickOcrTarget: function(detect, clickType) {
  194.         printl("\n【任务 2.4】点击 OCR 识别目标");
  195.         if (!detect) {
  196.             printl("✗ 目标为空或无效,无法点击");
  197.             return false;
  198.         }
  199.         
  200.         try {
  201.             if (clickType === "center") {
  202.                 // 使用 getRect() 获取中心点
  203.                 var rect = detect.getRect();
  204.                 var centerX = rect.getCenterX();
  205.                 var centerY = rect.getCenterY();
  206.                 printl("点击中心点:(" + centerX + ", " + centerY + ")");
  207.                 hid.click(centerX, centerY);
  208.             } else {
  209.                 printl("随机点击文本区域");
  210.                 detect.clickRandom();
  211.             }
  212.             
  213.             sleep(Config.clickDelay);
  214.             printl("✓ 点击成功");
  215.             return true;
  216.         } catch (e) {
  217.             printl("错误:" + e);
  218.             return false;
  219.         }
  220.     },
  221.    
  222.     /**
  223.      * 任务 2.5: 批量点击
  224.      */
  225.     clickMultipleTargets: function(detects) {
  226.         printl("\n【任务 2.5】批量点击多个目标");
  227.         if (!detects || detects.length === 0) {
  228.             printl("✗ 没有可点击的目标");
  229.             return;
  230.         }
  231.         
  232.         printl("准备点击 " + detects.length + " 个目标");
  233.         for (var i = 0; i < detects.length; i++) {
  234.             printl("点击目标 " + (i + 1) + "/" + detects.length);
  235.             detects[i].clickRandom();
  236.             sleep(300);
  237.         }
  238.         printl("✓ 批量点击完成");
  239.     }
  240. };

  241. /**
  242. * 模块 3: 图像识别进阶
  243. */
  244. var ImageModule = {
  245.     /**
  246.      * 任务 3.1: 基础找图
  247.      */
  248.     findImage: function(cvFile) {
  249.         printl("\n【任务 3.1】基础找图:" + cvFile);
  250.         try {
  251.             var detects = opencv.findImagesEx(cvFile);
  252.             
  253.             if (detects && detects.length > 0) {
  254.                 printl("✓ 找到 " + detects.length + " 个目标");
  255.                 for (var i = 0; i < Math.min(3, detects.length); i++) {
  256.                     printl("  [" + (i+1) + "] x=" + detects[i].x + ", y=" + detects[i].y);
  257.                 }
  258.                 return detects;
  259.             } else {
  260.                 printl("✗ 未找到目标");
  261.                 return [];
  262.             }
  263.         } catch (e) {
  264.             printl("错误:" + e);
  265.             return [];
  266.         }
  267.     },
  268.    
  269.     /**
  270.      * 任务 3.2: 区域找图
  271.      */
  272.     findImageInRegion: function(cvFile, region) {
  273.         printl("\n【任务 3.2】区域找图:" + cvFile);
  274.         printl("识别区域:[" + region.join(", ") + "]");
  275.         try {
  276.             var detects = opencv.findImages([cvFile], 0.8, 3000, 1, region);
  277.             
  278.             if (detects && detects.length > 0) {
  279.                 printl("✓ 在区域内找到 " + detects.length + " 个目标");
  280.                 return detects;
  281.             } else {
  282.                 printl("✗ 区域内未找到目标");
  283.                 return [];
  284.             }
  285.         } catch (e) {
  286.             printl("错误:" + e);
  287.             return [];
  288.         }
  289.     }
  290. };

  291. // ==================== 第三部分:综合实战案例 ====================

  292. /**
  293. * 实战案例 1: 智能应用启动器
  294. */
  295. var AppLauncher = {
  296.     /**
  297.      * 启动单个应用
  298.      */
  299.     launchApp: function(appName) {
  300.         printl("\n========================================");
  301.         printl("&#128640; 启动应用:" + appName);
  302.         printl("========================================");
  303.         
  304.         for (var retry = 0; retry < Config.retryTimes; retry++) {
  305.             try {
  306.                 printl("第 " + (retry + 1) + " 次尝试...");
  307.                
  308.                 // 1. OCR 识别
  309.                 var ocrResult = screen.ocr(0, 0, 1, 1);
  310.                
  311.                 // 2. 查找应用名称
  312.                 var appDetect = ocrResult.findIncludeText(appName, Config.defaultRegion);
  313.                
  314.                 if (appDetect && typeof appDetect === 'object' && appDetect.x) {
  315.                     printl("✓ 找到应用图标");
  316.                     
  317.                     // 3. 点击应用
  318.                     ClickModule.clickOcrTarget(appDetect, "center");
  319.                     
  320.                     printl("✓✓ 应用启动成功!");
  321.                     return true;
  322.                 } else {
  323.                     printl("✗ 未找到应用,准备重试...");
  324.                     sleep(1000);
  325.                 }
  326.             } catch (e) {
  327.                 printl("错误:" + e);
  328.                 sleep(1000);
  329.             }
  330.         }
  331.         
  332.         printl("✗✗ 应用启动失败(已重试 " + Config.retryTimes + " 次)");
  333.         return false;
  334.     },
  335.    
  336.     /**
  337.      * 批量启动应用
  338.      */
  339.     launchMultipleApps: function(appList) {
  340.         printl("\n========================================");
  341.         printl("&#128230; 批量启动应用");
  342.         printl("========================================");
  343.         
  344.         var successCount = 0;
  345.         
  346.         for (var i = 0; i < appList.length; i++) {
  347.             printl("\n正在启动 (" + (i + 1) + "/" + appList.length + "): " + appList[i]);
  348.             
  349.             if (this.launchApp(appList[i])) {
  350.                 successCount++;
  351.                 sleep(2000); // 应用切换等待
  352.             }
  353.             
  354.             sleep(500);
  355.         }
  356.         
  357.         printl("\n批量启动完成:成功 " + successCount + "/" + appList.length + " 个");
  358.     }
  359. };

  360. /**
  361. * 实战案例 2: 自动化导航系统
  362. */
  363. var AutoNavigator = {
  364.     /**
  365.      * 执行多步导航
  366.      */
  367.     navigate: function(steps) {
  368.         printl("\n========================================");
  369.         printl("&#129517; 开始自动化导航");
  370.         printl("========================================");
  371.         
  372.         for (var i = 0; i < steps.length; i++) {
  373.             var step = steps[i];
  374.             printl("\n步骤 " + (i + 1) + "/" + steps.length + ": " + step.action);
  375.             
  376.             try {
  377.                 if (step.action === "findAndClick") {
  378.                     var ocrResult = screen.ocr(0, 0, 1, 1);
  379.                     var target = ocrResult.findIncludeText(step.target, Config.defaultRegion);
  380.                     
  381.                     if (target && typeof target === 'object' && target.x) {
  382.                         ClickModule.clickOcrTarget(target, step.clickType || "random");
  383.                         printl("✓ 步骤完成");
  384.                         sleep(step.delay || 1000);
  385.                     } else {
  386.                         printl("✗ 未找到目标,导航中断");
  387.                         return false;
  388.                     }
  389.                 } else if (step.action === "waitFor") {
  390.                     printl("等待 " + step.duration + "ms...");
  391.                     sleep(step.duration);
  392.                 } else if (step.action === "swipe") {
  393.                     this.swipe(step.direction);
  394.                     printl("✓ 滑动完成");
  395.                 }
  396.             } catch (e) {
  397.                 printl("错误:" + e);
  398.                 return false;
  399.             }
  400.         }
  401.         
  402.         printl("\n✓✓ 导航完成!");
  403.         return true;
  404.     },
  405.    
  406.     /**
  407.      * 滑动操作
  408.      */
  409.     swipe: function(direction) {
  410.         try {
  411.             if (direction === "up") {
  412.                 hid.swipePercent(0.5, 0.8, 0.5, 0.2);
  413.             } else if (direction === "down") {
  414.                 hid.swipePercent(0.5, 0.2, 0.5, 0.8);
  415.             } else if (direction === "left") {
  416.                 hid.swipePercent(0.8, 0.5, 0.2, 0.5);
  417.             } else if (direction === "right") {
  418.                 hid.swipePercent(0.2, 0.5, 0.8, 0.5);
  419.             }
  420.             sleep(500);
  421.         } catch (e) {
  422.             printl("滑动错误:" + e);
  423.         }
  424.     }
  425. };

  426. /**
  427. * 实战案例 3: 智能表单填写器
  428. */
  429. var FormFiller = {
  430.     /**
  431.      * 自动填写表单
  432.      */
  433.     fillForm: function(formData) {
  434.         printl("\n========================================");
  435.         printl("&#128221; 开始填写表单");
  436.         printl("========================================");
  437.         
  438.         for (var fieldName in formData) {
  439.             var fieldValue = formData[fieldName];
  440.             printl("\n填写字段:" + fieldName);
  441.             
  442.             try {
  443.                 // 1. 查找字段标签
  444.                 var labelDetect = OCRModule.findText(fieldName, Config.defaultRegion);
  445.                            
  446.                 if (labelDetect != null) {
  447.                     // 2. 点击输入框(假设在标签下方)
  448.                     var rect = labelDetect.getRect();
  449.                     var inputX = rect.getCenterX();
  450.                     var inputY = rect.getBottom() + 50;
  451.                                 
  452.                     ClickModule.clickAbsolute(inputX, inputY);
  453.                     sleep(300);
  454.                                 
  455.                     // 3. 输入内容(需要使用输入模块)
  456.                     printl("输入内容:" + fieldValue);
  457.                     // 这里可以扩展输入功能
  458.                                 
  459.                     sleep(500);
  460.                 } else {
  461.                     printl("✗ 未找到字段标签:" + fieldName);
  462.                 }
  463.             } catch (e) {
  464.                 printl("错误:" + e);
  465.             }
  466.         }
  467.         
  468.         printl("\n✓ 表单填写完成");
  469.     }
  470. };

  471. // ==================== 第四部分:高级技巧与优化 ====================

  472. /**
  473. * 技巧 1: OCR 锁定优化
  474. */
  475. function demoOcrLock() {
  476.     printl("\n========================================");
  477.     printl("⚡ 技巧演示:OCR 锁定优化");
  478.     printl("========================================");
  479.    
  480.     try {
  481.         // 锁定 OCR
  482.         OCR.lockOCR();
  483.         printl("✓ OCR 已锁定");
  484.         
  485.         // 截图
  486.         var image = screen.screenShotFull();
  487.         
  488.         // 多次识别(使用同一张截图)
  489.         printl("\n第一次识别...");
  490.         var result1 = image.ocr(0, 0, 1, 1);
  491.         var text1 = result1.getAllString();
  492.         printl("识别到文本长度:" + text1.length);
  493.         
  494.         printl("\n第二次查找...");
  495.         var target = result1.findIncludeText("设置", Config.defaultRegion);
  496.         if (target != null) {
  497.             printl("✓ 找到目标");
  498.         }
  499.         
  500.         // 释放资源
  501.         image.close();
  502.         
  503.         // 解锁 OCR
  504.         OCR.unLock();
  505.         printl("✓ OCR 已解锁");
  506.         
  507.     } catch (e) {
  508.         printl("错误:" + e);
  509.         try {
  510.             OCR.unLock();
  511.         } catch (unlockError) {
  512.             // 忽略解锁错误
  513.         }
  514.     }
  515. }

  516. /**
  517. * 技巧 2: 安全查找(带重试机制)
  518. */
  519. function safeFindText(targetText, maxRetries) {
  520.     printl("\n安全查找文本:" + targetText);
  521.    
  522.     for (var retry = 0; retry < maxRetries; retry++) {
  523.         try {
  524.             printl("第 " + (retry + 1) + " 次尝试...");
  525.             var ocrResult = screen.ocr(0, 0, 1, 1);
  526.             var detect = ocrResult.findIncludeText(targetText, Config.defaultRegion);
  527.             
  528.             if (detect != null) {
  529.                 printl("✓ 找到目标");
  530.                 return detect;
  531.             }
  532.             
  533.             if (retry < maxRetries - 1) {
  534.                 printl("未找到,等待重试...");
  535.                 sleep(1000);
  536.             }
  537.         } catch (e) {
  538.             printl("查找出错:" + e);
  539.             if (retry < maxRetries - 1) {
  540.                 sleep(2000);
  541.             }
  542.         }
  543.     }
  544.    
  545.     printl("✗ 未找到目标");
  546.     return null;
  547. }

  548. /**
  549. * 技巧 3: 等待目标出现
  550. */
  551. function waitForTarget(targetText, maxWaitTime) {
  552.     printl("\n等待目标出现:" + targetText);
  553.     printl("最大等待时间:" + maxWaitTime + "ms");
  554.    
  555.     var startTime = Date.now();
  556.    
  557.     while (Date.now() - startTime < maxWaitTime) {
  558.         try {
  559.             var ocrResult = screen.ocr(0, 0, 1, 1);
  560.             var target = ocrResult.findIncludeText(targetText, Config.defaultRegion);
  561.             
  562.             if (target != null) {
  563.                 printl("✓ 目标出现!");
  564.                 return target;
  565.             }
  566.             
  567.             sleep(500);
  568.         } catch (e) {
  569.             printl("查找出错:" + e);
  570.             sleep(500);
  571.         }
  572.     }
  573.    
  574.     printl("✗ 超时,目标未出现");
  575.     return null;
  576. }

  577. // ==================== 第五部分:完整演示流程 ====================

  578. /**
  579. * 演示流程 1: 基础技能综合演练
  580. */
  581. function runBasicDemo() {
  582.     printl("\n");
  583.     printl("╔════════════════════════════════════════╗");
  584.     printl("║   基础技能综合演练                     ║");
  585.     printl("╚════════════════════════════════════════╝");
  586.    
  587.     // 1. OCR 识别
  588.     var allText = OCRModule.getAllText();
  589.    
  590.     // 2. 查找文本(示例:查找"设置")
  591.     var settingBtn = OCRModule.findText("设置");
  592.     if (settingBtn != null) {
  593.         printl("✓ 找到设置按钮,准备点击");
  594.         ClickModule.clickOcrTarget(settingBtn, "center");
  595.     } else {
  596.         printl("✗ 未找到设置按钮,跳过点击");
  597.     }
  598.    
  599.     sleep(1000);
  600.    
  601.     // 3. 查找多个目标(示例:查找包含"屏"的文本)
  602.     var screens = OCRModule.findIncludeTexts("屏");
  603.     if (screens && screens.length > 0) {
  604.         printl("找到 " + screens.length + " 个包含'屏'的文本,演示前 3 个");
  605.         ClickModule.clickMultipleTargets(screens.slice(0, Math.min(3, screens.length)));
  606.     }
  607.    
  608.     // 4. 正则查找(示例:查找数字)
  609.     var numbers = OCRModule.findWithRegex("\\d+");
  610.     if (numbers && numbers.length > 0) {
  611.         printl("\n找到 " + numbers.length + " 个包含数字的目标");
  612.         var rect = numbers[0].getRect();
  613.         printl("第一个目标位置:(" + rect.getCenterX().toFixed(3) + ", " + rect.getCenterY().toFixed(3) + ")");
  614.     }
  615. }

  616. /**
  617. * 演示流程 2: 应用启动实战
  618. */
  619. function runAppLauncherDemo() {
  620.     printl("\n");
  621.     printl("╔════════════════════════════════════════╗");
  622.     printl("║   应用启动器实战                       ║");
  623.     printl("╚════════════════════════════════════════╝");
  624.    
  625.     // 启动单个应用
  626.     AppLauncher.launchApp("微信");
  627.    
  628.     sleep(2000);
  629.    
  630.     // 批量启动
  631.     AppLauncher.launchMultipleApps(["QQ", "支付宝"]);
  632. }

  633. /**
  634. * 演示流程 3: 自动化导航实战
  635. */
  636. function runNavigatorDemo() {
  637.     printl("\n");
  638.     printl("╔════════════════════════════════════════╗");
  639.     printl("║   自动化导航实战                       ║");
  640.     printl("╚════════════════════════════════════════╝");
  641.    
  642.     // 定义导航步骤
  643.     var steps = [
  644.         { action: "findAndClick", target: "设置", clickType: "center", delay: 1500 },
  645.         { action: "waitFor", duration: 1000 },
  646.         { action: "findAndClick", target: "通用", clickType: "random", delay: 1500 },
  647.         { action: "swipe", direction: "up" },
  648.         { action: "waitFor", duration: 500 },
  649.         { action: "findAndClick", target: "关于", clickType: "center" }
  650.     ];
  651.    
  652.     AutoNavigator.navigate(steps);
  653. }

  654. /**
  655. * 演示流程 4: 高级技巧演练
  656. */
  657. function runAdvancedDemo() {
  658.     printl("\n");
  659.     printl("╔════════════════════════════════════════╗");
  660.     printl("║   高级技巧演练                         ║");
  661.     printl("╚════════════════════════════════════════╝");
  662.    
  663.     // 1. OCR 锁定
  664.     demoOcrLock();
  665.    
  666.     // 2. 安全查找
  667.     safeFindText("确定", 3);
  668.    
  669.     // 3. 等待目标
  670.     waitForTarget("取消", 5000);
  671. }

  672. // ==================== 主程序入口 ====================

  673. /**
  674. * 运行所有演示
  675. */
  676. function runAllDemos() {
  677.     printl("\n");
  678.     printl("╔═══════════════════════════════════════════╗");
  679.     printl("║  &#127822; AIWROK 屏幕自动化实战案例教学          ║");
  680.     printl("║  版本:" + Config.version + "                              ║");
  681.     printl("║  QQ 群:711841924 | 内测群:528816639      ║");
  682.     printl("╚═══════════════════════════════════════════╝");
  683.    
  684.     sleep(1000);
  685.    
  686.     // 基础技能演示
  687.     runBasicDemo();
  688.    
  689.     sleep(2000);
  690.    
  691.     // 应用启动器演示(注释掉,避免实际执行)
  692.     // runAppLauncherDemo();
  693.    
  694.     sleep(2000);
  695.    
  696.     // 导航系统演示(注释掉,避免实际执行)
  697.     // runNavigatorDemo();
  698.    
  699.     sleep(2000);
  700.    
  701.     // 高级技巧演示
  702.     runAdvancedDemo();
  703.    
  704.     printl("\n");
  705.     printl("╔═══════════════════════════════════════════╗");
  706.     printl("║  ✓ 所有演示完成!                         ║");
  707.     printl("║  祝你学习愉快!                           ║");
  708.     printl("╚═══════════════════════════════════════════╝");
  709. }

  710. /**
  711. * 单独运行某个演示(取消注释即可)
  712. */
  713. function main() {
  714.     // 运行所有演示
  715.     runAllDemos();
  716.    
  717.     // 或者单独运行某个演示:
  718.     // runBasicDemo();
  719.     // runAppLauncherDemo();
  720.     // runNavigatorDemo();
  721.     // runAdvancedDemo();
  722. }

  723. // 执行主程序
  724. main();
复制代码



unto苹果脚本屏幕类screen例子nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖