|
|
Æ»¹û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 ʶ±ðÇøÓò [x1, y1, x2, y2]
- * @returns {object} OCR½á¹û¶ÔÏó»ònull
- */
- function safeOcr(rect) {
- try {
- var ocrResult = screen.ocr(rect[0], rect[1], rect[2], rect[3]);
- 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([0, 0, 1, 1]);
- 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[i];
- 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([0, 0, 1, 1]);
- if (!ocrResult) {
- print.log('ÎÞ·¨»ñÈ¡OCR½á¹û£¬Ìø¹ý´ËʾÀý');
- return;
- }
-
- // ¶¨ÒåÒª²éÕҵij£¼û°´Å¥Îı¾
- var targetTexts = ['È·¶¨', 'È¡Ïû', 'Íê³É', 'ÏÂÒ»²½', '¹Ø±Õ', '±£´æ'];
- var found = false;
-
- for (var i = 0; i < targetTexts.length; i++) {
- var text = targetTexts[i];
- var target = ocrResult.findText(text, [0, 0, 1, 1]);
-
- 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([0, 0, 1, 1]);
- if (!ocrResult) {
- print.log('ÎÞ·¨»ñÈ¡OCR½á¹û£¬Ìø¹ý´ËʾÀý');
- return;
- }
-
- // ²éÕÒ°üº¬Ìض¨¹Ø¼ü´ÊµÄÎı¾
- var keyword = 'ÉèÖÃ';
- var targets = ocrResult.findIncludeTexts(keyword, [0, 0, 1, 1]);
-
- print.log('²éÕÒ°üº¬ "' + keyword + '" µÄÎı¾£¬ÕÒµ½ ' + targets.length + ' ¸ö½á¹û');
-
- for (var i = 0; i < targets.length; i++) {
- var target = targets[i];
- 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([0, 0, 1, 1]);
- if (!ocrResult) {
- print.log('ÎÞ·¨»ñÈ¡OCR½á¹û£¬Ìø¹ý´ËʾÀý');
- return;
- }
-
- // ʹÓÃÕýÔò±í´ïʽ²éÕÒÊý×Ö
- var regex = '\\d+';
- var targets = ocrResult.findTextWithRegex(regex, [0, 0, 1, 1]);
-
- print.log('ʹÓÃÕýÔò±í´ïʽ "' + regex + '" ²éÕÒÊý×Ö£¬ÕÒµ½ ' + targets.length + ' ¸ö½á¹û');
-
- for (var i = 0; i < targets.length; i++) {
- var target = targets[i];
- 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 = [0, 0.5, 1, 1];
- print.log('ÔÚÇøÓò [' + region[0] + ', ' + region[1] + ', ' + region[2] + ', ' + region[3] + '] ÄÚ½øÐÐ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[i];
- 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([0, 0, 1, 1]);
- if (!ocrResult1) {
- print.log('ÎÞ·¨»ñÈ¡OCR½á¹û£¬Ìø¹ý×Ô¶¯»¯Ê¾Àý');
- return;
- }
-
- var settingsTarget = ocrResult1.findText('ÉèÖÃ', [0, 0, 1, 1]);
- if (settingsTarget != null) {
- print.log('ÕÒµ½"ÉèÖÃ"Ó¦Óã¬×¼±¸µã»÷');
- // settingsTarget.click();
- print.log('Ä£Äâµã»÷"ÉèÖÃ"Ó¦ÓÃ');
-
- // µÈ´ýÓ¦ÓÃÆô¶¯
- sleep(3000);
-
- print.log('²½Öè2: ²éÕÒ²¢µã»÷"ͨÓÃ"Ñ¡Ïî');
- var ocrResult2 = safeOcr([0, 0, 1, 1]);
- if (ocrResult2) {
- var generalTarget = ocrResult2.findText('ͨÓÃ', [0, 0, 1, 1]);
- if (generalTarget != null) {
- print.log('ÕÒµ½"ͨÓÃ"Ñ¡Ï׼±¸µã»÷');
- // generalTarget.click();
- print.log('Ä£Äâµã»÷"ͨÓÃ"Ñ¡Ïî');
- } else {
- print.log('δÕÒµ½"ͨÓÃ"Ñ¡Ïî');
- }
- }
- } else {
- print.log('δÕÒµ½"ÉèÖÃ"Ó¦ÓÃ');
- }
-
- // ÑÝʾµã»÷µ×²¿µ¼º½À¸°´Å¥
- print.log('\n²½Öè3: ÑÝʾµã»÷µ×²¿µ¼º½À¸°´Å¥');
- var ocrResult3 = safeOcr([0, 0, 1, 1]);
- if (ocrResult3) {
- // ²éÕÒ²¢µã»÷"Èí¼þ"°´Å¥
- var softwareTarget = ocrResult3.findText('Èí¼þ', [0, 0, 1, 1]);
- if (softwareTarget != null) {
- print.log('ÕÒµ½"Èí¼þ"°´Å¥£¬×¼±¸µã»÷');
- // softwareTarget.click();
- print.log('Ä£Äâµã»÷"Èí¼þ"°´Å¥');
- sleep(2000);
- } else {
- print.log('δÕÒµ½"Èí¼þ"°´Å¥');
- }
-
- // ²éÕÒ²¢µã»÷"ÈÕÖ¾"°´Å¥
- var logTarget = ocrResult3.findText('ÈÕÖ¾', [0, 0, 1, 1]);
- if (logTarget != null) {
- print.log('ÕÒµ½"ÈÕÖ¾"°´Å¥£¬×¼±¸µã»÷');
- // logTarget.click();
- print.log('Ä£Äâµã»÷"ÈÕÖ¾"°´Å¥');
- sleep(2000);
- } else {
- print.log('δÕÒµ½"ÈÕÖ¾"°´Å¥');
- }
-
- // ²éÕÒ²¢µã»÷"ÉèÖÃ"°´Å¥
- var settingsNavTarget = ocrResult3.findText('ÉèÖÃ', [0, 0, 1, 1]);
- 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([0, 0, 1, 1]);
- 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[i];
- 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[j];
- 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[k];
- 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();
¸´ÖÆ´úÂë
|
|