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

[24小时收录超级好的网站] 苹果iOS脚本Detect类系统性使用示例

[复制链接]

2492

主题

2540

帖子

1万

积分

积分
15146
跳转到指定楼层
楼主
苹果iOS脚本Detect类系统性使用示例








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

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

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

  37. /**
  38. * 工具函数:阻塞式延迟
  39. * @param {number} ms 延迟时间(毫秒)
  40. */
  41. function sleep(ms) {
  42.     var start = Date.now();
  43.     while (Date.now() - start < ms) {
  44.         // 阻塞等待
  45.     }
  46. }

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

  54. /**
  55. * 工具函数:安全的OCR识别
  56. * @param {number[]} rect 识别区域 [x1, y1, x2, y2]
  57. * @returns {object} OCR结果对象或null
  58. */
  59. function safeOcr(rect) {
  60.     try {
  61.         var ocrResult = screen.ocr(rect[0], rect[1], rect[2], rect[3]);
  62.         return ocrResult;
  63.     } catch (e) {
  64.         print.log('OCR识别失败: ' + e.message);
  65.         return null;
  66.     }
  67. }

  68. /**
  69. * 工具函数:安全的截图
  70. * @returns {object} 截图对象或null
  71. */
  72. function safeScreenshot() {
  73.     try {
  74.         var screenshot = screen.screenShotFull();
  75.         return screenshot;
  76.     } catch (e) {
  77.         printl('截图失败: ' + e.message);
  78.         return null;
  79.     }
  80. }

  81. /**
  82. * 示例1: Detect类基本方法演示
  83. * 展示Detect类的核心方法使用
  84. */
  85. function basicDetectMethods() {
  86.     print.log('==== 示例1: Detect类基本方法演示 ====');
  87.    
  88.     try {
  89.         // 执行OCR识别
  90.         var ocrResult = safeOcr([0, 0, 1, 1]);
  91.         if (!ocrResult) {
  92.             print.log('无法获取OCR结果,跳过此示例');
  93.             return;
  94.         }
  95.         
  96.         // 获取所有检测目标
  97.         var detects = ocrResult.getAllDetect();
  98.         print.log('识别到 ' + detects.length + ' 个目标');
  99.         
  100.         if (detects.length > 0) {
  101.             // 分析前3个目标
  102.             var maxTargets = Math.min(detects.length, 3);
  103.             for (var i = 0; i < maxTargets; i++) {
  104.                 var detect = detects[i];
  105.                 print.log('\n目标 ' + (i + 1) + ':');
  106.                
  107.                 // 获取检测分数
  108.                 try {
  109.                     var score = detect.score();
  110.                     print.log('  置信度: ' + score.toFixed(2));
  111.                 } catch (e) {
  112.                     print.log('  获取置信度失败: ' + e.message);
  113.                 }
  114.                
  115.                 // 获取检测区域
  116.                 try {
  117.                     var rect = detect.getRect();
  118.                     print.log('  区域坐标: ' + rect);
  119.                 } catch (e) {
  120.                     print.log('  获取区域坐标失败: ' + e.message);
  121.                 }
  122.                
  123.                 // 访问属性
  124.                 try {
  125.                     print.log('  文本内容: ' + (detect.text || '无文本'));
  126.                     print.log('  位置: x=' + detect.x + ', y=' + detect.y);
  127.                     print.log('  尺寸: width=' + detect.width + ', height=' + detect.height);
  128.                 } catch (e) {
  129.                     print.log('  访问属性失败: ' + e.message);
  130.                 }
  131.             }
  132.         } else {
  133.             print.log('未检测到任何目标');
  134.         }
  135.         
  136.     } catch (e) {
  137.         print.log('示例1执行失败: ' + e.message);
  138.     }
  139. }

  140. /**
  141. * 示例2: 精确文本查找与点击
  142. * 使用findText方法查找精确文本并执行点击操作
  143. */
  144. function exactTextClick() {
  145.     print.log('\n==== 示例2: 精确文本查找与点击 ====');
  146.    
  147.     try {
  148.         var ocrResult = safeOcr([0, 0, 1, 1]);
  149.         if (!ocrResult) {
  150.             print.log('无法获取OCR结果,跳过此示例');
  151.             return;
  152.         }
  153.         
  154.         // 定义要查找的常见按钮文本
  155.         var targetTexts = ['确定', '取消', '完成', '下一步', '关闭', '保存'];
  156.         var found = false;
  157.         
  158.         for (var i = 0; i < targetTexts.length; i++) {
  159.             var text = targetTexts[i];
  160.             var target = ocrResult.findText(text, [0, 0, 1, 1]);
  161.             
  162.             if (target != null) {
  163.                 print.log('找到文本: "' + text + '"');
  164.                 print.log('  置信度: ' + target.score().toFixed(2));
  165.                 print.log('  区域: ' + target.getRect());
  166.                
  167.                 // 演示点击操作(实际使用时取消注释)
  168.                 print.log('  准备执行点击操作...');
  169.                 // target.click(); // 点击中心点
  170.                 // target.clickRandom(); // 随机点击
  171.                 print.log('  点击操作已模拟执行');
  172.                
  173.                 found = true;
  174.                 break;
  175.             }
  176.         }
  177.         
  178.         if (!found) {
  179.             print.log('未找到预定义的目标文本');
  180.         }
  181.         
  182.     } catch (e) {
  183.         print.log('示例2执行失败: ' + e.message);
  184.     }
  185. }

  186. /**
  187. * 示例3: 包含文本查找与批量处理
  188. * 使用findIncludeTexts方法查找包含特定文本的所有目标
  189. */
  190. function includeTextSearch() {
  191.     print.log('\n==== 示例3: 包含文本查找与批量处理 ====');
  192.    
  193.     try {
  194.         var ocrResult = safeOcr([0, 0, 1, 1]);
  195.         if (!ocrResult) {
  196.             print.log('无法获取OCR结果,跳过此示例');
  197.             return;
  198.         }
  199.         
  200.         // 查找包含特定关键词的文本
  201.         var keyword = '设置';
  202.         var targets = ocrResult.findIncludeTexts(keyword, [0, 0, 1, 1]);
  203.         
  204.         print.log('查找包含 "' + keyword + '" 的文本,找到 ' + targets.length + ' 个结果');
  205.         
  206.         for (var i = 0; i < targets.length; i++) {
  207.             var target = targets[i];
  208.             print.log('  结果 ' + (i + 1) + ': "' + target.text + '"');
  209.             print.log('    置信度: ' + target.score().toFixed(2));
  210.             print.log('    区域: ' + target.getRect());
  211.         }
  212.         
  213.     } catch (e) {
  214.         print.log('示例3执行失败: ' + e.message);
  215.     }
  216. }

  217. /**
  218. * 示例4: 正则表达式文本查找
  219. * 使用findTextWithRegex方法进行模式匹配
  220. */
  221. function regexTextSearch() {
  222.     print.log('\n==== 示例4: 正则表达式文本查找 ====');
  223.    
  224.     try {
  225.         var ocrResult = safeOcr([0, 0, 1, 1]);
  226.         if (!ocrResult) {
  227.             print.log('无法获取OCR结果,跳过此示例');
  228.             return;
  229.         }
  230.         
  231.         // 使用正则表达式查找数字
  232.         var regex = '\\d+';
  233.         var targets = ocrResult.findTextWithRegex(regex, [0, 0, 1, 1]);
  234.         
  235.         print.log('使用正则表达式 "' + regex + '" 查找数字,找到 ' + targets.length + ' 个结果');
  236.         
  237.         for (var i = 0; i < targets.length; i++) {
  238.             var target = targets[i];
  239.             print.log('  结果 ' + (i + 1) + ': "' + target.text + '"');
  240.             print.log('    置信度: ' + target.score().toFixed(2));
  241.             print.log('    区域: ' + target.getRect());
  242.         }
  243.         
  244.     } catch (e) {
  245.         print.log('示例4执行失败: ' + e.message);
  246.     }
  247. }

  248. /**
  249. * 示例5: 区域OCR与目标定位
  250. * 在指定区域内进行OCR识别并处理结果
  251. */
  252. function regionOcrProcessing() {
  253.     print.log('\n==== 示例5: 区域OCR与目标定位 ====');
  254.    
  255.     try {
  256.         // 定义屏幕区域(示例:屏幕下半部分)
  257.         var region = [0, 0.5, 1, 1];
  258.         print.log('在区域 [' + region[0] + ', ' + region[1] + ', ' + region[2] + ', ' + region[3] + '] 内进行OCR识别');
  259.         
  260.         var ocrResult = safeOcr(region);
  261.         if (!ocrResult) {
  262.             print.log('无法获取OCR结果,跳过此示例');
  263.             return;
  264.         }
  265.         
  266.         // 获取区域内的所有目标
  267.         var detects = ocrResult.getAllDetect();
  268.         print.log('区域内识别到 ' + detects.length + ' 个目标');
  269.         
  270.         // 按置信度排序并显示前5个
  271.         if (detects.length > 0) {
  272.             // 简单排序(按置信度降序)
  273.             detects.sort(function(a, b) {
  274.                 return b.score() - a.score();
  275.             });
  276.             
  277.             var topTargets = Math.min(detects.length, 5);
  278.             for (var i = 0; i < topTargets; i++) {
  279.                 var detect = detects[i];
  280.                 print.log('  目标 ' + (i + 1) + ': "' + detect.text + '" (置信度: ' + detect.score().toFixed(2) + ')');
  281.             }
  282.         }
  283.         
  284.     } catch (e) {
  285.         print.log('示例5执行失败: ' + e.message);
  286.     }
  287. }

  288. /**
  289. * 示例6: iOS应用自动化示例
  290. * 模拟一个完整的iOS应用操作流程
  291. */
  292. function iosAppAutomation() {
  293.     print.log('\n==== 示例6: iOS应用自动化示例 ====');
  294.    
  295.     try {
  296.         print.log('步骤1: 查找并点击"设置"应用');
  297.         var ocrResult1 = safeOcr([0, 0, 1, 1]);
  298.         if (!ocrResult1) {
  299.             print.log('无法获取OCR结果,跳过自动化示例');
  300.             return;
  301.         }
  302.         
  303.         var settingsTarget = ocrResult1.findText('设置', [0, 0, 1, 1]);
  304.         if (settingsTarget != null) {
  305.             print.log('找到"设置"应用,准备点击');
  306.             // settingsTarget.click();
  307.             print.log('模拟点击"设置"应用');
  308.             
  309.             // 等待应用启动
  310.             sleep(3000);
  311.             
  312.             print.log('步骤2: 查找并点击"通用"选项');
  313.             var ocrResult2 = safeOcr([0, 0, 1, 1]);
  314.             if (ocrResult2) {
  315.                 var generalTarget = ocrResult2.findText('通用', [0, 0, 1, 1]);
  316.                 if (generalTarget != null) {
  317.                     print.log('找到"通用"选项,准备点击');
  318.                     // generalTarget.click();
  319.                     print.log('模拟点击"通用"选项');
  320.                 } else {
  321.                     print.log('未找到"通用"选项');
  322.                 }
  323.             }
  324.         } else {
  325.             print.log('未找到"设置"应用');
  326.         }
  327.         
  328.         // 演示点击底部导航栏按钮
  329.         print.log('\n步骤3: 演示点击底部导航栏按钮');
  330.         var ocrResult3 = safeOcr([0, 0, 1, 1]);
  331.         if (ocrResult3) {
  332.             // 查找并点击"软件"按钮
  333.             var softwareTarget = ocrResult3.findText('软件', [0, 0, 1, 1]);
  334.             if (softwareTarget != null) {
  335.                 print.log('找到"软件"按钮,准备点击');
  336.                 // softwareTarget.click();
  337.                 print.log('模拟点击"软件"按钮');
  338.                 sleep(2000);
  339.             } else {
  340.                 print.log('未找到"软件"按钮');
  341.             }
  342.             
  343.             // 查找并点击"日志"按钮
  344.             var logTarget = ocrResult3.findText('日志', [0, 0, 1, 1]);
  345.             if (logTarget != null) {
  346.                 print.log('找到"日志"按钮,准备点击');
  347.                 // logTarget.click();
  348.                 print.log('模拟点击"日志"按钮');
  349.                 sleep(2000);
  350.             } else {
  351.                 print.log('未找到"日志"按钮');
  352.             }
  353.             
  354.             // 查找并点击"设置"按钮
  355.             var settingsNavTarget = ocrResult3.findText('设置', [0, 0, 1, 1]);
  356.             if (settingsNavTarget != null) {
  357.                 print.log('找到"设置"按钮,准备点击');
  358.                 // settingsNavTarget.click();
  359.                 print.log('模拟点击"设置"按钮');
  360.                 sleep(2000);
  361.             } else {
  362.                 print.log('未找到"设置"按钮');
  363.             }
  364.         }
  365.         
  366.     } catch (e) {
  367.         print.log('自动化示例执行失败: ' + e.message);
  368.     }
  369. }

  370. /**
  371. * 示例7: Detect类高级应用 - 目标过滤与选择
  372. * 根据条件过滤和选择检测目标
  373. */
  374. function advancedTargetSelection() {
  375.     print.log('\n==== 示例7: Detect类高级应用 - 目标过滤与选择 ====');
  376.    
  377.     try {
  378.         var ocrResult = safeOcr([0, 0, 1, 1]);
  379.         if (!ocrResult) {
  380.             print.log('无法获取OCR结果,跳过此示例');
  381.             return;
  382.         }
  383.         
  384.         var detects = ocrResult.getAllDetect();
  385.         print.log('原始检测目标数量: ' + detects.length);
  386.         
  387.         // 过滤条件1: 置信度大于0.8
  388.         var highConfidenceTargets = [];
  389.         for (var i = 0; i < detects.length; i++) {
  390.             var detect = detects[i];
  391.             if (detect.score() > 0.8) {
  392.                 highConfidenceTargets.push(detect);
  393.             }
  394.         }
  395.         
  396.         print.log('高置信度目标数量(>0.8): ' + highConfidenceTargets.length);
  397.         
  398.         // 过滤条件2: 文本长度大于2
  399.         var validTargets = [];
  400.         for (var j = 0; j < highConfidenceTargets.length; j++) {
  401.             var target = highConfidenceTargets[j];
  402.             if (target.text && target.text.length > 2) {
  403.                 validTargets.push(target);
  404.             }
  405.         }
  406.         
  407.         print.log('有效目标数量(文本长度>2): ' + validTargets.length);
  408.         
  409.         // 显示过滤后的目标
  410.         for (var k = 0; k < Math.min(validTargets.length, 3); k++) {
  411.             var target = validTargets[k];
  412.             print.log('  目标 ' + (k + 1) + ': "' + target.text + '" (置信度: ' + target.score().toFixed(2) + ')');
  413.         }
  414.         
  415.     } catch (e) {
  416.         print.log('示例7执行失败: ' + e.message);
  417.     }
  418. }

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

  444. // 调用主函数运行示例
  445. main();
复制代码



unto苹果iOS脚本Detect类系统性使用示例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三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖