YYPOST群发软件 发表于 2026-3-11 07:11:02

苹果iOS脚本Detect类系统性使用示例


苹果iOS脚本Detect类系统性使用示例







/*
   苹果iOS Detect类系统性使用示例
   欢迎使用AiWork苹果自动化IDE
   帮助文档: https://www.yuque.com/aiwork/
   官方地址: www.aiwork24.com
   
   🍎交流QQ群:711841924(群一 - 苹果内测群)
   🍎交流QQ群:528816639
   
   本示例提供了Detect类的完整使用方法,针对iOS平台进行了优化
   包含系统化的错误处理和实用的自动化案例
*/

/**
* Detect类方法概览
*
* 1. score() - 获取检测分数(置信度)
* 2. getRect() - 获取检测区域坐标
* 3. click() - 点击目标中心点
* 4. clickRandom() - 在目标区域内随机点击
* 5. x, y, width, height - 属性:目标的位置和尺寸
* 6. text - 属性:识别到的文本内容
*/

/**
* 工具函数:获取当前时间戳
* @returns {string} 格式化的时间戳
*/
function getTimestamp() {
    var date = new Date();
    var year = date.getFullYear();
    var month = (date.getMonth() + 1).toString().padStart(2, '0');
    var day = date.getDate().toString().padStart(2, '0');
    var hours = date.getHours().toString().padStart(2, '0');
    var minutes = date.getMinutes().toString().padStart(2, '0');
    var seconds = date.getSeconds().toString().padStart(2, '0');
    return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
}

/**
* 工具函数:阻塞式延迟
* @param {number} ms 延迟时间(毫秒)
*/
function sleep(ms) {
    var start = Date.now();
    while (Date.now() - start < ms) {
      // 阻塞等待
    }
}

/**
* 工具函数:日志输出
* @param {string} message 日志消息
*/
function log(message) {
    print.log('[' + getTimestamp() + '] ' + message);
}

/**
* 工具函数:安全的OCR识别
* @param {number[]} rect 识别区域
* @returns {object} OCR结果对象或null
*/
function safeOcr(rect) {
    try {
      var ocrResult = screen.ocr(rect, rect, rect, rect);
      return ocrResult;
    } catch (e) {
      print.log('OCR识别失败: ' + e.message);
      return null;
    }
}

/**
* 工具函数:安全的截图
* @returns {object} 截图对象或null
*/
function safeScreenshot() {
    try {
      var screenshot = screen.screenShotFull();
      return screenshot;
    } catch (e) {
      printl('截图失败: ' + e.message);
      return null;
    }
}

/**
* 示例1: Detect类基本方法演示
* 展示Detect类的核心方法使用
*/
function basicDetectMethods() {
    print.log('==== 示例1: Detect类基本方法演示 ====');
   
    try {
      // 执行OCR识别
      var ocrResult = safeOcr();
      if (!ocrResult) {
            print.log('无法获取OCR结果,跳过此示例');
            return;
      }
      
      // 获取所有检测目标
      var detects = ocrResult.getAllDetect();
      print.log('识别到 ' + detects.length + ' 个目标');
      
      if (detects.length > 0) {
            // 分析前3个目标
            var maxTargets = Math.min(detects.length, 3);
            for (var i = 0; i < maxTargets; i++) {
                var detect = detects;
                print.log('\n目标 ' + (i + 1) + ':');
               
                // 获取检测分数
                try {
                  var score = detect.score();
                  print.log('置信度: ' + score.toFixed(2));
                } catch (e) {
                  print.log('获取置信度失败: ' + e.message);
                }
               
                // 获取检测区域
                try {
                  var rect = detect.getRect();
                  print.log('区域坐标: ' + rect);
                } catch (e) {
                  print.log('获取区域坐标失败: ' + e.message);
                }
               
                // 访问属性
                try {
                  print.log('文本内容: ' + (detect.text || '无文本'));
                  print.log('位置: x=' + detect.x + ', y=' + detect.y);
                  print.log('尺寸: width=' + detect.width + ', height=' + detect.height);
                } catch (e) {
                  print.log('访问属性失败: ' + e.message);
                }
            }
      } else {
            print.log('未检测到任何目标');
      }
      
    } catch (e) {
      print.log('示例1执行失败: ' + e.message);
    }
}

/**
* 示例2: 精确文本查找与点击
* 使用findText方法查找精确文本并执行点击操作
*/
function exactTextClick() {
    print.log('\n==== 示例2: 精确文本查找与点击 ====');
   
    try {
      var ocrResult = safeOcr();
      if (!ocrResult) {
            print.log('无法获取OCR结果,跳过此示例');
            return;
      }
      
      // 定义要查找的常见按钮文本
      var targetTexts = ['确定', '取消', '完成', '下一步', '关闭', '保存'];
      var found = false;
      
      for (var i = 0; i < targetTexts.length; i++) {
            var text = targetTexts;
            var target = ocrResult.findText(text, );
            
            if (target != null) {
                print.log('找到文本: "' + text + '"');
                print.log('置信度: ' + target.score().toFixed(2));
                print.log('区域: ' + target.getRect());
               
                // 演示点击操作(实际使用时取消注释)
                print.log('准备执行点击操作...');
                // target.click(); // 点击中心点
                // target.clickRandom(); // 随机点击
                print.log('点击操作已模拟执行');
               
                found = true;
                break;
            }
      }
      
      if (!found) {
            print.log('未找到预定义的目标文本');
      }
      
    } catch (e) {
      print.log('示例2执行失败: ' + e.message);
    }
}

/**
* 示例3: 包含文本查找与批量处理
* 使用findIncludeTexts方法查找包含特定文本的所有目标
*/
function includeTextSearch() {
    print.log('\n==== 示例3: 包含文本查找与批量处理 ====');
   
    try {
      var ocrResult = safeOcr();
      if (!ocrResult) {
            print.log('无法获取OCR结果,跳过此示例');
            return;
      }
      
      // 查找包含特定关键词的文本
      var keyword = '设置';
      var targets = ocrResult.findIncludeTexts(keyword, );
      
      print.log('查找包含 "' + keyword + '" 的文本,找到 ' + targets.length + ' 个结果');
      
      for (var i = 0; i < targets.length; i++) {
            var target = targets;
            print.log('结果 ' + (i + 1) + ': "' + target.text + '"');
            print.log('    置信度: ' + target.score().toFixed(2));
            print.log('    区域: ' + target.getRect());
      }
      
    } catch (e) {
      print.log('示例3执行失败: ' + e.message);
    }
}

/**
* 示例4: 正则表达式文本查找
* 使用findTextWithRegex方法进行模式匹配
*/
function regexTextSearch() {
    print.log('\n==== 示例4: 正则表达式文本查找 ====');
   
    try {
      var ocrResult = safeOcr();
      if (!ocrResult) {
            print.log('无法获取OCR结果,跳过此示例');
            return;
      }
      
      // 使用正则表达式查找数字
      var regex = '\\d+';
      var targets = ocrResult.findTextWithRegex(regex, );
      
      print.log('使用正则表达式 "' + regex + '" 查找数字,找到 ' + targets.length + ' 个结果');
      
      for (var i = 0; i < targets.length; i++) {
            var target = targets;
            print.log('结果 ' + (i + 1) + ': "' + target.text + '"');
            print.log('    置信度: ' + target.score().toFixed(2));
            print.log('    区域: ' + target.getRect());
      }
      
    } catch (e) {
      print.log('示例4执行失败: ' + e.message);
    }
}

/**
* 示例5: 区域OCR与目标定位
* 在指定区域内进行OCR识别并处理结果
*/
function regionOcrProcessing() {
    print.log('\n==== 示例5: 区域OCR与目标定位 ====');
   
    try {
      // 定义屏幕区域(示例:屏幕下半部分)
      var region = ;
      print.log('在区域 [' + region + ', ' + region + ', ' + region + ', ' + region + '] 内进行OCR识别');
      
      var ocrResult = safeOcr(region);
      if (!ocrResult) {
            print.log('无法获取OCR结果,跳过此示例');
            return;
      }
      
      // 获取区域内的所有目标
      var detects = ocrResult.getAllDetect();
      print.log('区域内识别到 ' + detects.length + ' 个目标');
      
      // 按置信度排序并显示前5个
      if (detects.length > 0) {
            // 简单排序(按置信度降序)
            detects.sort(function(a, b) {
                return b.score() - a.score();
            });
            
            var topTargets = Math.min(detects.length, 5);
            for (var i = 0; i < topTargets; i++) {
                var detect = detects;
                print.log('目标 ' + (i + 1) + ': "' + detect.text + '" (置信度: ' + detect.score().toFixed(2) + ')');
            }
      }
      
    } catch (e) {
      print.log('示例5执行失败: ' + e.message);
    }
}

/**
* 示例6: iOS应用自动化示例
* 模拟一个完整的iOS应用操作流程
*/
function iosAppAutomation() {
    print.log('\n==== 示例6: iOS应用自动化示例 ====');
   
    try {
      print.log('步骤1: 查找并点击"设置"应用');
      var ocrResult1 = safeOcr();
      if (!ocrResult1) {
            print.log('无法获取OCR结果,跳过自动化示例');
            return;
      }
      
      var settingsTarget = ocrResult1.findText('设置', );
      if (settingsTarget != null) {
            print.log('找到"设置"应用,准备点击');
            // settingsTarget.click();
            print.log('模拟点击"设置"应用');
            
            // 等待应用启动
            sleep(3000);
            
            print.log('步骤2: 查找并点击"通用"选项');
            var ocrResult2 = safeOcr();
            if (ocrResult2) {
                var generalTarget = ocrResult2.findText('通用', );
                if (generalTarget != null) {
                  print.log('找到"通用"选项,准备点击');
                  // generalTarget.click();
                  print.log('模拟点击"通用"选项');
                } else {
                  print.log('未找到"通用"选项');
                }
            }
      } else {
            print.log('未找到"设置"应用');
      }
      
      // 演示点击底部导航栏按钮
      print.log('\n步骤3: 演示点击底部导航栏按钮');
      var ocrResult3 = safeOcr();
      if (ocrResult3) {
            // 查找并点击"软件"按钮
            var softwareTarget = ocrResult3.findText('软件', );
            if (softwareTarget != null) {
                print.log('找到"软件"按钮,准备点击');
                // softwareTarget.click();
                print.log('模拟点击"软件"按钮');
                sleep(2000);
            } else {
                print.log('未找到"软件"按钮');
            }
            
            // 查找并点击"日志"按钮
            var logTarget = ocrResult3.findText('日志', );
            if (logTarget != null) {
                print.log('找到"日志"按钮,准备点击');
                // logTarget.click();
                print.log('模拟点击"日志"按钮');
                sleep(2000);
            } else {
                print.log('未找到"日志"按钮');
            }
            
            // 查找并点击"设置"按钮
            var settingsNavTarget = ocrResult3.findText('设置', );
            if (settingsNavTarget != null) {
                print.log('找到"设置"按钮,准备点击');
                // settingsNavTarget.click();
                print.log('模拟点击"设置"按钮');
                sleep(2000);
            } else {
                print.log('未找到"设置"按钮');
            }
      }
      
    } catch (e) {
      print.log('自动化示例执行失败: ' + e.message);
    }
}

/**
* 示例7: Detect类高级应用 - 目标过滤与选择
* 根据条件过滤和选择检测目标
*/
function advancedTargetSelection() {
    print.log('\n==== 示例7: Detect类高级应用 - 目标过滤与选择 ====');
   
    try {
      var ocrResult = safeOcr();
      if (!ocrResult) {
            print.log('无法获取OCR结果,跳过此示例');
            return;
      }
      
      var detects = ocrResult.getAllDetect();
      print.log('原始检测目标数量: ' + detects.length);
      
      // 过滤条件1: 置信度大于0.8
      var highConfidenceTargets = [];
      for (var i = 0; i < detects.length; i++) {
            var detect = detects;
            if (detect.score() > 0.8) {
                highConfidenceTargets.push(detect);
            }
      }
      
      print.log('高置信度目标数量(>0.8): ' + highConfidenceTargets.length);
      
      // 过滤条件2: 文本长度大于2
      var validTargets = [];
      for (var j = 0; j < highConfidenceTargets.length; j++) {
            var target = highConfidenceTargets;
            if (target.text && target.text.length > 2) {
                validTargets.push(target);
            }
      }
      
      print.log('有效目标数量(文本长度>2): ' + validTargets.length);
      
      // 显示过滤后的目标
      for (var k = 0; k < Math.min(validTargets.length, 3); k++) {
            var target = validTargets;
            print.log('目标 ' + (k + 1) + ': "' + target.text + '" (置信度: ' + target.score().toFixed(2) + ')');
      }
      
    } catch (e) {
      print.log('示例7执行失败: ' + e.message);
    }
}

/**
* 主函数 - 运行所有示例
*/
function main() {
    print.log('苹果iOS Detect类系统性使用示例');
    print.log('=====================================');
   
    // 运行各个示例
    basicDetectMethods();
    exactTextClick();
    includeTextSearch();
    regexTextSearch();
    regionOcrProcessing();
    iosAppAutomation();
    advancedTargetSelection();
   
    print.log('\n所有示例执行完毕!');
    print.log('=====================================');
    print.log('使用说明:');
    print.log('1. 本示例针对iOS平台优化,包含完整的错误处理');
    print.log('2. 实际使用时,请取消注释相应的点击操作代码');
    print.log('3. 根据具体应用场景调整OCR区域和目标文本');
    print.log('4. 对于连续操作,建议添加适当的sleep等待时间');
    print.log('5. 可以根据需要扩展异常处理逻辑');
}

// 调用主函数运行示例
main();

页: [1]
查看完整版本: 苹果iOS脚本Detect类系统性使用示例