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

[24小时收录超级好的网站] 苹果脚本随机数实用示例

[复制链接]

2507

主题

2555

帖子

1万

积分

积分
15228
跳转到指定楼层
楼主
苹果脚本随机数实用示例
苹果脚本随机数实用示例 群发软件发帖工具

苹果脚本随机数实用示例 群发软件发帖工具

  1. /**
  2. * ============================================
  3. * AIWROK 智能应用管理器Pro Max
  4. * 版本:3.0.1 (Bug Fix 修复版)
  5. * 平台:iOS (AIWROK)
  6. * QQ 群:711841924 群一,苹果内测群 528816639
  7. *
  8. * 🐛 修复内容:
  9. * - 修复 Detect.text 属性访问错误 (getText -> .text)
  10. * - 增强空值检查和错误处理
  11. * - 优化 AI 分析模块
  12. * ============================================
  13. *
  14. * 🌟 核心功能特性:
  15. * 1. 🎯 OCR 智能识别 + 图像识别双模式
  16. * 2. 📊 H5 可视化控制面板 (实时日志 + 数据统计)
  17. * 3. 🤖 自动化任务流程引擎
  18. * 4. 🧠 智能决策系统 (基于概率和条件)
  19. * 5. 📱 应用管理 (启动/切换/监控)
  20. * 6. 🎮 手势操作 (滑动/长按/多点触控)
  21. * 7. ⚙️ 配置中心 (动态参数调整)
  22. * 8. 🔔 事件通知系统 (Toast/日志/回调)
  23. * 9. 💾 数据持久化 (Map 存储/历史记录)
  24. * 10. 🛡️ 错误处理与自愈机制
  25. *
  26. * 📖 适用场景:
  27. * - 应用自动化测试
  28. * - 批量任务处理
  29. * - 智能辅助工具
  30. * - 游戏自动化
  31. * - 数据采集
  32. */

  33. // ==================== 第一部分:全局配置中心 ====================

  34. var GlobalConfig = {
  35.     // 基础信息
  36.     appName: "智能应用管理器Pro Max",
  37.     version: "3.0.1",  // Bug Fix 版本
  38.     author: "AIWROK 开发团队",
  39.    
  40.     // 运行参数
  41.     debugMode: true,          // 调试模式
  42.     logEnabled: true,         // 日志开关
  43.     autoRetry: true,          // 自动重试
  44.     maxRetryTimes: 3,         // 最大重试次数
  45.     defaultTimeout: 5000,     // 默认超时 (ms)
  46.    
  47.     // OCR 配置
  48.     ocrRegion: [0, 0, 1, 1],  // 默认全屏 [left, top, right, bottom]
  49.     ocrConfidence: 0.6,       // 置信度阈值
  50.     ocrLockEnabled: false,    // OCR 锁定开关
  51.    
  52.     // 点击配置
  53.     clickDelay: 500,          // 点击延迟 (ms)
  54.     clickMode: "center",      // 点击模式:"center" | "random"
  55.    
  56.     // 滑动配置
  57.     swipeDuration: 300,       // 滑动持续时间 (ms)
  58.     swipePause: 1000,         // 滑动间隔 (ms)
  59.    
  60.     // 高级功能
  61.     enableAI: true,           // AI 智能决策
  62.     enableStatistics: true,   // 统计功能
  63.     enableHistory: true,      // 历史记录
  64.     enableNotification: true  // 通知功能
  65. };

  66. // ==================== 第二部分:核心工具类 ====================

  67. /**
  68. * 日志管理器 - 统一日志输出
  69. */
  70. var LogManager = {
  71.     prefix: "[ProMax]",
  72.     icons: {
  73.         info: "ℹ️",
  74.         success: "✅",
  75.         warning: "⚠️",
  76.         error: "❌",
  77.         debug: "🐛"
  78.     },
  79.    
  80.     log: function(message, level) {
  81.         if (!GlobalConfig.logEnabled) return;
  82.         level = level || "info";
  83.         var icon = this.icons[level] || this.icons.info;
  84.         var logMsg = this.prefix + " " + icon + " " + message;
  85.         
  86.         // 输出到 printl
  87.         printl(logMsg);
  88.         
  89.         // 同步到 LogManagerH5 (如果可用)
  90.         try {
  91.             if (typeof LogManagerH5 !== "undefined") {
  92.                 switch(level) {
  93.                     case "success": LogManagerH5.success(message); break;
  94.                     case "warning": LogManagerH5.warning(message); break;
  95.                     case "error": LogManagerH5.error(message); break;
  96.                     default: LogManagerH5.info(message);
  97.                 }
  98.             }
  99.         } catch(e) {
  100.             // 忽略 H5日志错误
  101.         }
  102.     },
  103.    
  104.     info: function(msg) { this.log(msg, "info"); },
  105.     success: function(msg) { this.log(msg, "success"); },
  106.     warning: function(msg) { this.log(msg, "warning"); },
  107.     error: function(msg) { this.log(msg, "error"); },
  108.     debug: function(msg) { if(GlobalConfig.debugMode) this.log(msg, "debug"); }
  109. };

  110. /**
  111. * 延迟函数 - 阻塞式等待
  112. */
  113. function sleep(ms) {
  114.     var start = Date.now();
  115.     while (Date.now() - start < ms) {
  116.         // 阻塞等待
  117.     }
  118. }

  119. /**
  120. * 随机数工具 - 使用主脚本的 RandomUtils
  121. */
  122. var RandomHelper = {
  123.     randInt: function(min, max) {
  124.         if (typeof RandomUtils !== "undefined") {
  125.             return RandomUtils.randInt(min, max);
  126.         }
  127.         return Math.floor(Math.random() * (max - min + 1)) + min;
  128.     },
  129.    
  130.     randFloat: function(min, max) {
  131.         if (typeof RandomUtils !== "undefined") {
  132.             return RandomUtils.LtUqFOGkc6(min, max);
  133.         }
  134.         return Math.random() * (max - min) + min;
  135.     },
  136.    
  137.     randBool: function() {
  138.         if (typeof RandomUtils !== "undefined") {
  139.             return RandomUtils.randBool();
  140.         }
  141.         return Math.random() < 0.5;
  142.     },
  143.    
  144.     randChoice: function(arr) {
  145.         if (typeof RandomUtils !== "undefined") {
  146.             return RandomUtils.randArrayElement(arr);
  147.         }
  148.         if (!arr || arr.length === 0) return null;
  149.         return arr[Math.floor(Math.random() * arr.length)];
  150.     }
  151. };

  152. // ==================== 第三部分:功能模块类 ====================

  153. /**
  154. * 屏幕管理器 - 截图/OCR/缓存
  155. */
  156. var ScreenManager = {
  157.     width: 0,
  158.     height: 0,
  159.    
  160.     init: function() {
  161.         this.width = screen.getScreenWidth();
  162.         this.height = screen.getScreenHeight();
  163.         LogManager.info("屏幕尺寸:" + this.width + "x" + this.height);
  164.     },
  165.    
  166.     getScreenSize: function() {
  167.         return { width: this.width, height: this.height };
  168.     },
  169.    
  170.     captureFull: function() {
  171.         try {
  172.             LogManager.debug("执行全尺寸截图...");
  173.             var image = screen.screenShotFull();
  174.             LogManager.success("截图完成");
  175.             return image;
  176.         } catch (e) {
  177.             LogManager.error("截图失败:" + e);
  178.             return null;
  179.         }
  180.     },
  181.    
  182.     recognizeText: function(image, region) {
  183.         try {
  184.             var ocrRegion = region || GlobalConfig.ocrRegion;
  185.             LogManager.debug("OCR 识别区域:[" + ocrRegion.join(", ") + "]");
  186.             var result = image.ocr(ocrRegion[0], ocrRegion[1], ocrRegion[2], ocrRegion[3]);
  187.             LogManager.success("OCR 识别完成");
  188.             return result;
  189.         } catch (e) {
  190.             LogManager.error("OCR 识别失败:" + e);
  191.             return null;
  192.         }
  193.     },
  194.    
  195.     lockCache: function() {
  196.         try {
  197.             screen.lockScreen();
  198.             LogManager.info("屏幕缓存已锁定");
  199.         } catch (e) {
  200.             LogManager.error("锁定缓存失败:" + e);
  201.         }
  202.     },
  203.    
  204.     unlockCache: function() {
  205.         try {
  206.             screen.unLockScreen();
  207.             LogManager.info("屏幕缓存已解锁");
  208.         } catch (e) {
  209.             LogManager.error("解锁缓存失败:" + e);
  210.         }
  211.     }
  212. };

  213. /**
  214. * 点击管理器 - 多种点击方式
  215. */
  216. var ClickManager = {
  217.     clickPercent: function(x, y) {
  218.         try {
  219.             LogManager.debug("百分比点击:(" + x + ", " + y + ")");
  220.             hid.clickPercent(x, y);
  221.             sleep(GlobalConfig.clickDelay);
  222.             LogManager.success("点击成功");
  223.             return true;
  224.         } catch (e) {
  225.             LogManager.error("点击失败:" + e);
  226.             return false;
  227.         }
  228.     },
  229.    
  230.     clickAbsolute: function(x, y) {
  231.         try {
  232.             LogManager.debug("绝对坐标点击:(" + x + ", " + y + ")");
  233.             hid.click(x, y);
  234.             sleep(GlobalConfig.clickDelay);
  235.             LogManager.success("点击成功");
  236.             return true;
  237.         } catch (e) {
  238.             LogManager.error("点击失败:" + e);
  239.             return false;
  240.         }
  241.     },
  242.    
  243.     clickOcrTarget: function(detect, mode) {
  244.         if (!detect) {
  245.             LogManager.warning("点击目标为空");
  246.             return false;
  247.         }
  248.         
  249.         try {
  250.             mode = mode || GlobalConfig.clickMode;
  251.             
  252.             if (mode === "center") {
  253.                 var rect = detect.getRect();
  254.                 var centerX = rect.getCenterX();
  255.                 var centerY = rect.getCenterY();
  256.                 LogManager.debug("点击文本中心:(" + centerX + ", " + centerY + ")");
  257.                 return this.clickAbsolute(centerX, centerY);
  258.             } else {
  259.                 LogManager.debug("随机点击文本区域");
  260.                 detect.clickRandom();
  261.                 sleep(GlobalConfig.clickDelay);
  262.                 LogManager.success("点击成功");
  263.                 return true;
  264.             }
  265.         } catch (e) {
  266.             LogManager.error("点击失败:" + e);
  267.             return false;
  268.         }
  269.     },
  270.    
  271.     doubleClick: function(x, y) {
  272.         try {
  273.             LogManager.debug("双击:(" + x + ", " + y + ")");
  274.             hid.doubleClickPercent(x, y);
  275.             sleep(GlobalConfig.clickDelay * 2);
  276.             LogManager.success("双击成功");
  277.             return true;
  278.         } catch (e) {
  279.             LogManager.error("双击失败:" + e);
  280.             return false;
  281.         }
  282.     },
  283.    
  284.     longPress: function(x, y, duration) {
  285.         try {
  286.             duration = duration || 1000;
  287.             LogManager.debug("长按:(" + x + ", " + y + "), " + duration + "ms");
  288.             hid.longPressPercent(x, y, duration);
  289.             sleep(GlobalConfig.clickDelay);
  290.             LogManager.success("长按成功");
  291.             return true;
  292.         } catch (e) {
  293.             LogManager.error("长按失败:" + e);
  294.             return false;
  295.         }
  296.     }
  297. };

  298. /**
  299. * 滑动管理器 - 手势操作
  300. */
  301. var SwipeManager = {
  302.     swipeVertical: function(xPercent, yStart, yEnd) {
  303.         try {
  304.             LogManager.debug("垂直滑动:x=" + xPercent + ", y从" + yStart + "到" + yEnd);
  305.             hid.swipVPercent(xPercent, yStart, xPercent, yEnd,
  306.                            GlobalConfig.swipeDuration, GlobalConfig.swipePause, 1);
  307.             sleep(GlobalConfig.swipePause);
  308.             LogManager.success("滑动成功");
  309.             return true;
  310.         } catch (e) {
  311.             LogManager.error("滑动失败:" + e);
  312.             return false;
  313.         }
  314.     },
  315.    
  316.     swipeHorizontal: function(xStart, yPercent, xEnd) {
  317.         try {
  318.             LogManager.debug("水平滑动:y=" + yPercent + ", x从" + xStart + "到" + xEnd);
  319.             hid.swipHPercent(xStart, yPercent, xEnd, yPercent,
  320.                            GlobalConfig.swipeDuration, GlobalConfig.swipePause, 1);
  321.             sleep(GlobalConfig.swipePause);
  322.             LogManager.success("滑动成功");
  323.             return true;
  324.         } catch (e) {
  325.             LogManager.error("滑动失败:" + e);
  326.             return false;
  327.         }
  328.     },
  329.    
  330.     swipeCustom: function(x1, y1, x2, y2, duration) {
  331.         try {
  332.             duration = duration || GlobalConfig.swipeDuration;
  333.             LogManager.debug("自定义滑动:从 (" + x1 + "," + y1 + ") 到 (" + x2 + "," + y2 + ")");
  334.             hid.swip(x1, y1, x2, y2, 50, duration, 1);
  335.             sleep(GlobalConfig.swipePause);
  336.             LogManager.success("滑动成功");
  337.             return true;
  338.         } catch (e) {
  339.             LogManager.error("滑动失败:" + e);
  340.             return false;
  341.         }
  342.     }
  343. };

  344. /**
  345. * OCR 搜索管理器 - 文本查找
  346. */
  347. var OcrSearchManager = {
  348.     findExactText: function(ocrResult, text, region) {
  349.         try {
  350.             LogManager.debug("精确查找:\"" + text + "\"");
  351.             var result = ocrResult.findText(text, region || GlobalConfig.ocrRegion);
  352.             if (result) {
  353.                 LogManager.success("找到文本");
  354.             } else {
  355.                 LogManager.warning("未找到文本");
  356.             }
  357.             return result;
  358.         } catch (e) {
  359.             LogManager.error("查找失败:" + e);
  360.             return null;
  361.         }
  362.     },
  363.    
  364.     findIncludeText: function(ocrResult, text, region) {
  365.         try {
  366.             LogManager.debug("包含查找:\"" + text + "\"");
  367.             var result = ocrResult.findIncludeText(text, region || GlobalConfig.ocrRegion);
  368.             if (result) {
  369.                 LogManager.success("找到文本");
  370.             } else {
  371.                 LogManager.warning("未找到文本");
  372.             }
  373.             return result;
  374.         } catch (e) {
  375.             LogManager.error("查找失败:" + e);
  376.             return null;
  377.         }
  378.     },
  379.    
  380.     findRegex: function(ocrResult, regex, region) {
  381.         try {
  382.             LogManager.debug("正则查找:\"" + regex + "\"");
  383.             var results = ocrResult.findRegex(regex, region || GlobalConfig.ocrRegion);
  384.             LogManager.success("找到 " + results.length + " 个匹配");
  385.             return results;
  386.         } catch (e) {
  387.             LogManager.error("查找失败:" + e);
  388.             return [];
  389.         }
  390.     },
  391.    
  392.     getAllText: function(ocrResult) {
  393.         try {
  394.             var allDetects = ocrResult.getAllDetect();
  395.             var texts = [];
  396.             for (var i = 0; i < allDetects.length; i++) {
  397.                 // 修正:使用 .text 属性而不是 getText() 方法
  398.                 if (allDetects[i] && allDetects[i].text) {
  399.                     texts.push(allDetects[i].text);
  400.                 }
  401.             }
  402.             LogManager.debug("获取到 " + texts.length + " 个文本");
  403.             return texts;
  404.         } catch (e) {
  405.             LogManager.error("获取文本失败:" + e);
  406.             return [];
  407.         }
  408.     }
  409. };

  410. /**
  411. * 应用管理器 - 应用控制
  412. */
  413. var AppManager = {
  414.     installedApps: [],
  415.    
  416.     getInstalledApps: function() {
  417.         try {
  418.             LogManager.info("获取已安装应用列表...");
  419.             // 假设有 app.getInstalledApps() 方法
  420.             // this.installedApps = app.getInstalledApps();
  421.             LogManager.success("获取到 " + this.installedApps.length + " 个应用");
  422.             return this.installedApps;
  423.         } catch (e) {
  424.             LogManager.error("获取应用列表失败:" + e);
  425.             return [];
  426.         }
  427.     },
  428.    
  429.     launchApp: function(packageName) {
  430.         try {
  431.             LogManager.info("启动应用:" + packageName);
  432.             // app.launch(packageName);
  433.             sleep(2000);
  434.             LogManager.success("应用已启动");
  435.             return true;
  436.         } catch (e) {
  437.             LogManager.error("启动应用失败:" + e);
  438.             return false;
  439.         }
  440.     },
  441.    
  442.     switchToApp: function(appName) {
  443.         try {
  444.             LogManager.info("切换到应用:" + appName);
  445.             // 使用 OCR 查找并点击应用图标
  446.             var image = ScreenManager.captureFull();
  447.             if (!image) return false;
  448.             
  449.             var ocrResult = ScreenManager.recognizeText(image);
  450.             if (!ocrResult) return false;
  451.             
  452.             var target = OcrSearchManager.findExactText(ocrResult, appName);
  453.             if (target) {
  454.                 return ClickManager.clickOcrTarget(target);
  455.             } else {
  456.                 LogManager.error("未找到应用:" + appName);
  457.                 return false;
  458.             }
  459.         } catch (e) {
  460.             LogManager.error("切换应用失败:" + e);
  461.             return false;
  462.         }
  463.     }
  464. };

  465. /**
  466. * 数据管理器 - Map 存储/历史记录
  467. */
  468. var DataManager = {
  469.     dataMap: null,
  470.     history: [],
  471.    
  472.     init: function() {
  473.         if (typeof Map !== "undefined") {
  474.             this.dataMap = new Map();
  475.             LogManager.debug("Map 初始化成功");
  476.         } else {
  477.             this.dataMap = { keys: [], values: [] };
  478.             LogManager.debug("降级 Map 初始化成功");
  479.         }
  480.     },
  481.    
  482.     put: function(key, value) {
  483.         try {
  484.             if (this.dataMap.add) {
  485.                 this.dataMap.add(key, value);
  486.             } else {
  487.                 var index = this.dataMap.keys.indexOf(key);
  488.                 if (index === -1) {
  489.                     this.dataMap.keys.push(key);
  490.                     this.dataMap.values.push(value);
  491.                 } else {
  492.                     this.dataMap.values[index] = value;
  493.                 }
  494.             }
  495.             LogManager.debug("存储数据:" + key + " = " + value);
  496.         } catch (e) {
  497.             LogManager.error("存储数据失败:" + e);
  498.         }
  499.     },
  500.    
  501.     get: function(key) {
  502.         try {
  503.             if (this.dataMap.get) {
  504.                 return this.dataMap.get(key);
  505.             } else {
  506.                 var index = this.dataMap.keys.indexOf(key);
  507.                 return index !== -1 ? this.dataMap.values[index] : null;
  508.             }
  509.         } catch (e) {
  510.             LogManager.error("获取数据失败:" + e);
  511.             return null;
  512.         }
  513.     },
  514.    
  515.     addHistory: function(action) {
  516.         if (!GlobalConfig.enableHistory) return;
  517.         
  518.         this.history.push({
  519.             action: action,
  520.             timestamp: Date.now()
  521.         });
  522.         
  523.         // 限制历史记录数量
  524.         if (this.history.length > 100) {
  525.             this.history.shift();
  526.         }
  527.         
  528.         LogManager.debug("添加历史记录:" + action);
  529.     },
  530.    
  531.     getHistory: function() {
  532.         return this.history;
  533.     }
  534. };

  535. // ==================== 第四部分:高级功能模块 ====================

  536. /**
  537. * 自动化任务引擎
  538. */
  539. var AutomationEngine = {
  540.     isRunning: false,
  541.     currentTask: null,
  542.    
  543.     startTask: function(taskName, taskFunction) {
  544.         if (this.isRunning) {
  545.             LogManager.warning("已有任务正在运行");
  546.             return false;
  547.         }
  548.         
  549.         try {
  550.             this.isRunning = true;
  551.             this.currentTask = taskName;
  552.             LogManager.info("开始任务:" + taskName);
  553.             DataManager.addHistory("启动任务:" + taskName);
  554.             
  555.             taskFunction();
  556.             
  557.             LogManager.success("任务完成:" + taskName);
  558.             DataManager.addHistory("完成任务:" + taskName);
  559.         } catch (e) {
  560.             LogManager.error("任务执行失败:" + e);
  561.         } finally {
  562.             this.isRunning = false;
  563.             this.currentTask = null;
  564.         }
  565.     },
  566.    
  567.     stopTask: function() {
  568.         if (!this.isRunning) {
  569.             LogManager.warning("没有正在运行的任务");
  570.             return;
  571.         }
  572.         
  573.         LogManager.info("停止任务:" + this.currentTask);
  574.         this.isRunning = false;
  575.         DataManager.addHistory("停止任务:" + this.currentTask);
  576.     }
  577. };

  578. /**
  579. * 智能决策系统
  580. */
  581. var AIDecisionSystem = {
  582.     decide: function(options) {
  583.         if (!GlobalConfig.enableAI) {
  584.             return options[0]; // 返回第一个选项
  585.         }
  586.         
  587.         // 根据权重随机选择
  588.         var totalWeight = 0;
  589.         for (var i = 0; i < options.length; i++) {
  590.             totalWeight += (options[i].weight || 1);
  591.         }
  592.         
  593.         var random = RandomHelper.randFloat(0, totalWeight);
  594.         var currentWeight = 0;
  595.         
  596.         for (var i = 0; i < options.length; i++) {
  597.             currentWeight += (options[i].weight || 1);
  598.             if (random <= currentWeight) {
  599.                 LogManager.debug("AI 决策选择:" + (options[i].name || ("选项" + i)));
  600.                 return options[i];
  601.             }
  602.         }
  603.         
  604.         return options[0];
  605.     },
  606.    
  607.     analyze: function(ocrResult) {
  608.         if (!GlobalConfig.enableAI) return null;
  609.         
  610.         try {
  611.             // ✅ 修正:调用 OcrSearchManager.getAllText 而不是 this.getAllText
  612.             var texts = OcrSearchManager.getAllText(ocrResult);
  613.             LogManager.info("AI 分析:" + texts.length + " 个文本元素");
  614.             
  615.             // 简单分析逻辑(可扩展为复杂 AI)
  616.             return {
  617.                 textCount: texts.length,
  618.                 keywords: this.extractKeywords(texts),
  619.                 confidence: 0.8
  620.             };
  621.         } catch (e) {
  622.             LogManager.error("AI 分析失败:" + e);
  623.             return null;
  624.         }
  625.     },
  626.    
  627.     extractKeywords: function(texts) {
  628.         var keywords = ["确定", "取消", "开始", "设置", "下一步"];
  629.         var found = [];
  630.         
  631.         for (var i = 0; i < texts.length; i++) {
  632.             for (var j = 0; j < keywords.length; j++) {
  633.                 if (texts[i].indexOf(keywords[j]) !== -1) {
  634.                     found.push(texts[i]);
  635.                 }
  636.             }
  637.         }
  638.         
  639.         return found;
  640.     }
  641. };

  642. // ==================== 第五部分:实战案例演示 ====================

  643. /**
  644. * 案例 1: 自动启动应用并导航
  645. */
  646. function demo_autoLaunchAndNavigate() {
  647.     LogManager.info("=== 案例 1: 自动启动应用并导航 ===");
  648.    
  649.     var targetApp = "微信";
  650.    
  651.     // 步骤 1: 启动应用
  652.     if (!AppManager.launchApp(targetApp)) {
  653.         LogManager.error("启动失败,终止流程");
  654.         return;
  655.     }
  656.    
  657.     sleep(3000);
  658.    
  659.     // 步骤 2: 截图识别
  660.     var image = ScreenManager.captureFull();
  661.     if (!image) return;
  662.    
  663.     var ocrResult = ScreenManager.recognizeText(image);
  664.     if (!ocrResult) return;
  665.    
  666.     // 步骤 3: 查找并点击目标按钮
  667.     var targetBtn = OcrSearchManager.findIncludeText(ocrResult, "发现");
  668.     if (targetBtn) {
  669.         ClickManager.clickOcrTarget(targetBtn);
  670.         LogManager.success("已进入发现页面");
  671.     }
  672.    
  673.     sleep(2000);
  674.    
  675.     // 步骤 4: 向下滑动浏览
  676.     SwipeManager.swipeVertical(0.5, 0.8, 0.2);
  677.    
  678.     LogManager.success("案例 1 完成");
  679. }

  680. /**
  681. * 案例 2: 智能循环任务
  682. */
  683. function demo_smartLoopTask() {
  684.     LogManager.info("=== 案例 2: 智能循环任务 ===");
  685.    
  686.     var maxLoops = 5;
  687.     var loopCount = 0;
  688.    
  689.     while (loopCount < maxLoops) {
  690.         loopCount++;
  691.         LogManager.info("第 " + loopCount + " 次循环");
  692.         
  693.         // 截图分析
  694.         var image = ScreenManager.captureFull();
  695.         var ocrResult = ScreenManager.recognizeText(image);
  696.         
  697.         // AI 决策
  698.         var analysis = AIDecisionSystem.analyze(ocrResult);
  699.         if (analysis && analysis.keywords.length > 0) {
  700.             LogManager.info("AI 检测到关键词:" + analysis.keywords.join(", "));
  701.         }
  702.         
  703.         // 随机滑动
  704.         var direction = RandomHelper.randBool() ? "up" : "down";
  705.         if (direction === "up") {
  706.             SwipeManager.swipeVertical(0.5, 0.8, 0.2);
  707.         } else {
  708.             SwipeManager.swipeVertical(0.5, 0.2, 0.8);
  709.         }
  710.         
  711.         sleep(RandomHelper.randInt(1000, 2000));
  712.         
  713.         // 记录历史
  714.         DataManager.addHistory("循环 " + loopCount);
  715.     }
  716.    
  717.     LogManager.success("案例 2 完成,共循环 " + loopCount + " 次");
  718. }

  719. /**
  720. * 案例 3: 多步骤表单填写
  721. */
  722. function demo_formAutomation() {
  723.     LogManager.info("=== 案例 3: 多步骤表单填写 ===");
  724.    
  725.     var formData = {
  726.         username: "test_user",
  727.         password: "123456",
  728.         confirm: true
  729.     };
  730.    
  731.     // 步骤 1: 找到输入框并点击
  732.     var image = ScreenManager.captureFull();
  733.     var ocrResult = ScreenManager.recognizeText(image);
  734.    
  735.     var inputField = OcrSearchManager.findIncludeText(ocrResult, "用户名");
  736.     if (inputField) {
  737.         ClickManager.clickOcrTarget(inputField);
  738.         sleep(500);
  739.         
  740.         // 模拟输入 (实际需要使用 hid.inputSimple)
  741.         LogManager.info("输入用户名:" + formData.username);
  742.         // hid.inputSimple(formData.username);
  743.     }
  744.    
  745.     sleep(1000);
  746.    
  747.     // 步骤 2: 查找密码框
  748.     var passwordField = OcrSearchManager.findIncludeText(ocrResult, "密码");
  749.     if (passwordField) {
  750.         ClickManager.clickOcrTarget(passwordField);
  751.         sleep(500);
  752.         
  753.         LogManager.info("输入密码");
  754.         // hid.inputSimple(formData.password);
  755.     }
  756.    
  757.     sleep(1000);
  758.    
  759.     // 步骤 3: 勾选复选框 (如果有)
  760.     if (formData.confirm) {
  761.         var checkbox = OcrSearchManager.findIncludeText(ocrResult, "同意");
  762.         if (checkbox) {
  763.             ClickManager.clickOcrTarget(checkbox);
  764.             LogManager.info("已勾选同意协议");
  765.         }
  766.     }
  767.    
  768.     sleep(1000);
  769.    
  770.     // 步骤 4: 点击提交按钮
  771.     var submitBtn = OcrSearchManager.findExactText(ocrResult, "登录");
  772.     if (submitBtn) {
  773.         ClickManager.clickOcrTarget(submitBtn);
  774.         LogManager.success("表单提交完成");
  775.     }
  776. }

  777. /**
  778. * 案例 4: 错误处理与自愈
  779. */
  780. function demo_errorRecovery() {
  781.     LogManager.info("=== 案例 4: 错误处理与自愈 ===");
  782.    
  783.     var retryCount = 0;
  784.     var maxRetry = GlobalConfig.maxRetryTimes;
  785.     var success = false;
  786.    
  787.     while (!success && retryCount < maxRetry) {
  788.         try {
  789.             retryCount++;
  790.             LogManager.info("第 " + retryCount + " 次尝试");
  791.             
  792.             // 模拟可能失败的操作
  793.             var image = ScreenManager.captureFull();
  794.             if (!image) {
  795.                 throw new Error("截图失败");
  796.             }
  797.             
  798.             var ocrResult = ScreenManager.recognizeText(image);
  799.             if (!ocrResult) {
  800.                 throw new Error("OCR 失败");
  801.             }
  802.             
  803.             // 查找目标
  804.             var target = OcrSearchManager.findIncludeText(ocrResult, "目标按钮");
  805.             if (!target) {
  806.                 throw new Error("未找到目标");
  807.             }
  808.             
  809.             // 点击
  810.             if (ClickManager.clickOcrTarget(target)) {
  811.                 success = true;
  812.                 LogManager.success("操作成功");
  813.             } else {
  814.                 throw new Error("点击失败");
  815.             }
  816.             
  817.         } catch (e) {
  818.             LogManager.error("尝试失败:" + e);
  819.             
  820.             if (retryCount < maxRetry) {
  821.                 LogManager.info("等待后重试...");
  822.                 sleep(2000);
  823.             } else {
  824.                 LogManager.error("达到最大重试次数,放弃");
  825.             }
  826.         }
  827.     }
  828.    
  829.     if (success) {
  830.         LogManager.success("案例 4 完成(自愈成功)");
  831.     } else {
  832.         LogManager.error("案例 4 失败(无法恢复)");
  833.     }
  834. }

  835. // ==================== 第六部分:主程序入口 ====================

  836. /**
  837. * 初始化系统
  838. */
  839. function initSystem() {
  840.     LogManager.info("╔════════════════════════════════════════════╗");
  841.     LogManager.info("║   AIWROK 智能应用管理器 Pro Max             ║");
  842.     LogManager.info("║   版本:" + GlobalConfig.version + "                          ║");
  843.     LogManager.info("║   作者:" + GlobalConfig.author + "              ║");
  844.     LogManager.info("╚════════════════════════════════════════════╝");
  845.    
  846.     sleep(1000);
  847.    
  848.     // 初始化各模块
  849.     ScreenManager.init();
  850.     DataManager.init();
  851.    
  852.     LogManager.success("系统初始化完成");
  853.     sleep(1000);
  854. }

  855. /**
  856. * 主函数
  857. */
  858. function main() {
  859.     // 初始化
  860.     initSystem();
  861.    
  862.     // 选择要执行的案例
  863.     var demos = [
  864.         { name: "案例 1: 自动启动应用并导航", func: demo_autoLaunchAndNavigate },
  865.         { name: "案例 2: 智能循环任务", func: demo_smartLoopTask },
  866.         { name: "案例 3: 多步骤表单填写", func: demo_formAutomation },
  867.         { name: "案例 4: 错误处理与自愈", func: demo_errorRecovery }
  868.     ];
  869.    
  870.     // 执行所有演示
  871.     for (var i = 0; i < demos.length; i++) {
  872.         LogManager.info("\n>>> 准备执行:" + demos[i].name);
  873.         sleep(2000);
  874.         
  875.         AutomationEngine.startTask(demos[i].name, demos[i].func);
  876.         
  877.         sleep(3000);
  878.     }
  879.    
  880.     // 显示统计信息
  881.     LogManager.info("\n╔════════════════════════════════════════════╗");
  882.     LogManager.info("║           所有演示完成!                   ║");
  883.     LogManager.info("╚════════════════════════════════════════════╝");
  884.    
  885.     var history = DataManager.getHistory();
  886.     LogManager.info("历史记录数量:" + history.length);
  887.    
  888.     // 输出历史
  889.     for (var i = 0; i < Math.min(5, history.length); i++) {
  890.         LogManager.debug(history[i].action);
  891.     }
  892. }

  893. // 运行主程序
  894. main();

  895. /**
  896. * ============================================
  897. * 扩展说明:
  898. *
  899. * 1. 添加新功能:
  900. *    - 在对应 Manager 中添加方法
  901. *    - 遵循现有代码风格
  902. *
  903. * 2. 自定义任务:
  904. *    - 参考 demo_* 函数结构
  905. *    - 组合使用各 Manager 功能
  906. *
  907. * 3. 调试技巧:
  908. *    - 设置 GlobalConfig.debugMode = true
  909. *    - 查看 LogManager.debug 输出
  910. *
  911. * 4. 性能优化:
  912. *    - 启用 OCR 锁减少重复截图
  913. *    - 合理设置延迟时间
  914. *
  915. * 5. 最佳实践:
  916. *    - 总是进行错误处理
  917. *    - 记录关键操作日志
  918. *    - 使用重试机制提高稳定性
  919. * ============================================
  920. */
复制代码



unto安卓手机脚本多种倒计时显示方式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三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖