 | |  |  | 苹果脚本随机数实用示例
- /**
- * ============================================
- * AIWROK 智能应用管理器Pro Max
- * 版本:3.0.1 (Bug Fix 修复版)
- * 平台:iOS (AIWROK)
- * QQ 群:711841924 群一,苹果内测群 528816639
- *
- * 🐛 修复内容:
- * - 修复 Detect.text 属性访问错误 (getText -> .text)
- * - 增强空值检查和错误处理
- * - 优化 AI 分析模块
- * ============================================
- *
- * 🌟 核心功能特性:
- * 1. 🎯 OCR 智能识别 + 图像识别双模式
- * 2. 📊 H5 可视化控制面板 (实时日志 + 数据统计)
- * 3. 🤖 自动化任务流程引擎
- * 4. 🧠 智能决策系统 (基于概率和条件)
- * 5. 📱 应用管理 (启动/切换/监控)
- * 6. 🎮 手势操作 (滑动/长按/多点触控)
- * 7. ⚙️ 配置中心 (动态参数调整)
- * 8. 🔔 事件通知系统 (Toast/日志/回调)
- * 9. 💾 数据持久化 (Map 存储/历史记录)
- * 10. 🛡️ 错误处理与自愈机制
- *
- * 📖 适用场景:
- * - 应用自动化测试
- * - 批量任务处理
- * - 智能辅助工具
- * - 游戏自动化
- * - 数据采集
- */
- // ==================== 第一部分:全局配置中心 ====================
- var GlobalConfig = {
- // 基础信息
- appName: "智能应用管理器Pro Max",
- version: "3.0.1", // Bug Fix 版本
- author: "AIWROK 开发团队",
-
- // 运行参数
- debugMode: true, // 调试模式
- logEnabled: true, // 日志开关
- autoRetry: true, // 自动重试
- maxRetryTimes: 3, // 最大重试次数
- defaultTimeout: 5000, // 默认超时 (ms)
-
- // OCR 配置
- ocrRegion: [0, 0, 1, 1], // 默认全屏 [left, top, right, bottom]
- ocrConfidence: 0.6, // 置信度阈值
- ocrLockEnabled: false, // OCR 锁定开关
-
- // 点击配置
- clickDelay: 500, // 点击延迟 (ms)
- clickMode: "center", // 点击模式:"center" | "random"
-
- // 滑动配置
- swipeDuration: 300, // 滑动持续时间 (ms)
- swipePause: 1000, // 滑动间隔 (ms)
-
- // 高级功能
- enableAI: true, // AI 智能决策
- enableStatistics: true, // 统计功能
- enableHistory: true, // 历史记录
- enableNotification: true // 通知功能
- };
- // ==================== 第二部分:核心工具类 ====================
- /**
- * 日志管理器 - 统一日志输出
- */
- var LogManager = {
- prefix: "[ProMax]",
- icons: {
- info: "ℹ️",
- success: "✅",
- warning: "⚠️",
- error: "❌",
- debug: "🐛"
- },
-
- log: function(message, level) {
- if (!GlobalConfig.logEnabled) return;
- level = level || "info";
- var icon = this.icons[level] || this.icons.info;
- var logMsg = this.prefix + " " + icon + " " + message;
-
- // 输出到 printl
- printl(logMsg);
-
- // 同步到 LogManagerH5 (如果可用)
- try {
- if (typeof LogManagerH5 !== "undefined") {
- switch(level) {
- case "success": LogManagerH5.success(message); break;
- case "warning": LogManagerH5.warning(message); break;
- case "error": LogManagerH5.error(message); break;
- default: LogManagerH5.info(message);
- }
- }
- } catch(e) {
- // 忽略 H5日志错误
- }
- },
-
- info: function(msg) { this.log(msg, "info"); },
- success: function(msg) { this.log(msg, "success"); },
- warning: function(msg) { this.log(msg, "warning"); },
- error: function(msg) { this.log(msg, "error"); },
- debug: function(msg) { if(GlobalConfig.debugMode) this.log(msg, "debug"); }
- };
- /**
- * 延迟函数 - 阻塞式等待
- */
- function sleep(ms) {
- var start = Date.now();
- while (Date.now() - start < ms) {
- // 阻塞等待
- }
- }
- /**
- * 随机数工具 - 使用主脚本的 RandomUtils
- */
- var RandomHelper = {
- randInt: function(min, max) {
- if (typeof RandomUtils !== "undefined") {
- return RandomUtils.randInt(min, max);
- }
- return Math.floor(Math.random() * (max - min + 1)) + min;
- },
-
- randFloat: function(min, max) {
- if (typeof RandomUtils !== "undefined") {
- return RandomUtils.LtUqFOGkc6(min, max);
- }
- return Math.random() * (max - min) + min;
- },
-
- randBool: function() {
- if (typeof RandomUtils !== "undefined") {
- return RandomUtils.randBool();
- }
- return Math.random() < 0.5;
- },
-
- randChoice: function(arr) {
- if (typeof RandomUtils !== "undefined") {
- return RandomUtils.randArrayElement(arr);
- }
- if (!arr || arr.length === 0) return null;
- return arr[Math.floor(Math.random() * arr.length)];
- }
- };
- // ==================== 第三部分:功能模块类 ====================
- /**
- * 屏幕管理器 - 截图/OCR/缓存
- */
- var ScreenManager = {
- width: 0,
- height: 0,
-
- init: function() {
- this.width = screen.getScreenWidth();
- this.height = screen.getScreenHeight();
- LogManager.info("屏幕尺寸:" + this.width + "x" + this.height);
- },
-
- getScreenSize: function() {
- return { width: this.width, height: this.height };
- },
-
- captureFull: function() {
- try {
- LogManager.debug("执行全尺寸截图...");
- var image = screen.screenShotFull();
- LogManager.success("截图完成");
- return image;
- } catch (e) {
- LogManager.error("截图失败:" + e);
- return null;
- }
- },
-
- recognizeText: function(image, region) {
- try {
- var ocrRegion = region || GlobalConfig.ocrRegion;
- LogManager.debug("OCR 识别区域:[" + ocrRegion.join(", ") + "]");
- var result = image.ocr(ocrRegion[0], ocrRegion[1], ocrRegion[2], ocrRegion[3]);
- LogManager.success("OCR 识别完成");
- return result;
- } catch (e) {
- LogManager.error("OCR 识别失败:" + e);
- return null;
- }
- },
-
- lockCache: function() {
- try {
- screen.lockScreen();
- LogManager.info("屏幕缓存已锁定");
- } catch (e) {
- LogManager.error("锁定缓存失败:" + e);
- }
- },
-
- unlockCache: function() {
- try {
- screen.unLockScreen();
- LogManager.info("屏幕缓存已解锁");
- } catch (e) {
- LogManager.error("解锁缓存失败:" + e);
- }
- }
- };
- /**
- * 点击管理器 - 多种点击方式
- */
- var ClickManager = {
- clickPercent: function(x, y) {
- try {
- LogManager.debug("百分比点击:(" + x + ", " + y + ")");
- hid.clickPercent(x, y);
- sleep(GlobalConfig.clickDelay);
- LogManager.success("点击成功");
- return true;
- } catch (e) {
- LogManager.error("点击失败:" + e);
- return false;
- }
- },
-
- clickAbsolute: function(x, y) {
- try {
- LogManager.debug("绝对坐标点击:(" + x + ", " + y + ")");
- hid.click(x, y);
- sleep(GlobalConfig.clickDelay);
- LogManager.success("点击成功");
- return true;
- } catch (e) {
- LogManager.error("点击失败:" + e);
- return false;
- }
- },
-
- clickOcrTarget: function(detect, mode) {
- if (!detect) {
- LogManager.warning("点击目标为空");
- return false;
- }
-
- try {
- mode = mode || GlobalConfig.clickMode;
-
- if (mode === "center") {
- var rect = detect.getRect();
- var centerX = rect.getCenterX();
- var centerY = rect.getCenterY();
- LogManager.debug("点击文本中心:(" + centerX + ", " + centerY + ")");
- return this.clickAbsolute(centerX, centerY);
- } else {
- LogManager.debug("随机点击文本区域");
- detect.clickRandom();
- sleep(GlobalConfig.clickDelay);
- LogManager.success("点击成功");
- return true;
- }
- } catch (e) {
- LogManager.error("点击失败:" + e);
- return false;
- }
- },
-
- doubleClick: function(x, y) {
- try {
- LogManager.debug("双击:(" + x + ", " + y + ")");
- hid.doubleClickPercent(x, y);
- sleep(GlobalConfig.clickDelay * 2);
- LogManager.success("双击成功");
- return true;
- } catch (e) {
- LogManager.error("双击失败:" + e);
- return false;
- }
- },
-
- longPress: function(x, y, duration) {
- try {
- duration = duration || 1000;
- LogManager.debug("长按:(" + x + ", " + y + "), " + duration + "ms");
- hid.longPressPercent(x, y, duration);
- sleep(GlobalConfig.clickDelay);
- LogManager.success("长按成功");
- return true;
- } catch (e) {
- LogManager.error("长按失败:" + e);
- return false;
- }
- }
- };
- /**
- * 滑动管理器 - 手势操作
- */
- var SwipeManager = {
- swipeVertical: function(xPercent, yStart, yEnd) {
- try {
- LogManager.debug("垂直滑动:x=" + xPercent + ", y从" + yStart + "到" + yEnd);
- hid.swipVPercent(xPercent, yStart, xPercent, yEnd,
- GlobalConfig.swipeDuration, GlobalConfig.swipePause, 1);
- sleep(GlobalConfig.swipePause);
- LogManager.success("滑动成功");
- return true;
- } catch (e) {
- LogManager.error("滑动失败:" + e);
- return false;
- }
- },
-
- swipeHorizontal: function(xStart, yPercent, xEnd) {
- try {
- LogManager.debug("水平滑动:y=" + yPercent + ", x从" + xStart + "到" + xEnd);
- hid.swipHPercent(xStart, yPercent, xEnd, yPercent,
- GlobalConfig.swipeDuration, GlobalConfig.swipePause, 1);
- sleep(GlobalConfig.swipePause);
- LogManager.success("滑动成功");
- return true;
- } catch (e) {
- LogManager.error("滑动失败:" + e);
- return false;
- }
- },
-
- swipeCustom: function(x1, y1, x2, y2, duration) {
- try {
- duration = duration || GlobalConfig.swipeDuration;
- LogManager.debug("自定义滑动:从 (" + x1 + "," + y1 + ") 到 (" + x2 + "," + y2 + ")");
- hid.swip(x1, y1, x2, y2, 50, duration, 1);
- sleep(GlobalConfig.swipePause);
- LogManager.success("滑动成功");
- return true;
- } catch (e) {
- LogManager.error("滑动失败:" + e);
- return false;
- }
- }
- };
- /**
- * OCR 搜索管理器 - 文本查找
- */
- var OcrSearchManager = {
- findExactText: function(ocrResult, text, region) {
- try {
- LogManager.debug("精确查找:\"" + text + "\"");
- var result = ocrResult.findText(text, region || GlobalConfig.ocrRegion);
- if (result) {
- LogManager.success("找到文本");
- } else {
- LogManager.warning("未找到文本");
- }
- return result;
- } catch (e) {
- LogManager.error("查找失败:" + e);
- return null;
- }
- },
-
- findIncludeText: function(ocrResult, text, region) {
- try {
- LogManager.debug("包含查找:\"" + text + "\"");
- var result = ocrResult.findIncludeText(text, region || GlobalConfig.ocrRegion);
- if (result) {
- LogManager.success("找到文本");
- } else {
- LogManager.warning("未找到文本");
- }
- return result;
- } catch (e) {
- LogManager.error("查找失败:" + e);
- return null;
- }
- },
-
- findRegex: function(ocrResult, regex, region) {
- try {
- LogManager.debug("正则查找:\"" + regex + "\"");
- var results = ocrResult.findRegex(regex, region || GlobalConfig.ocrRegion);
- LogManager.success("找到 " + results.length + " 个匹配");
- return results;
- } catch (e) {
- LogManager.error("查找失败:" + e);
- return [];
- }
- },
-
- getAllText: function(ocrResult) {
- try {
- var allDetects = ocrResult.getAllDetect();
- var texts = [];
- for (var i = 0; i < allDetects.length; i++) {
- // 修正:使用 .text 属性而不是 getText() 方法
- if (allDetects[i] && allDetects[i].text) {
- texts.push(allDetects[i].text);
- }
- }
- LogManager.debug("获取到 " + texts.length + " 个文本");
- return texts;
- } catch (e) {
- LogManager.error("获取文本失败:" + e);
- return [];
- }
- }
- };
- /**
- * 应用管理器 - 应用控制
- */
- var AppManager = {
- installedApps: [],
-
- getInstalledApps: function() {
- try {
- LogManager.info("获取已安装应用列表...");
- // 假设有 app.getInstalledApps() 方法
- // this.installedApps = app.getInstalledApps();
- LogManager.success("获取到 " + this.installedApps.length + " 个应用");
- return this.installedApps;
- } catch (e) {
- LogManager.error("获取应用列表失败:" + e);
- return [];
- }
- },
-
- launchApp: function(packageName) {
- try {
- LogManager.info("启动应用:" + packageName);
- // app.launch(packageName);
- sleep(2000);
- LogManager.success("应用已启动");
- return true;
- } catch (e) {
- LogManager.error("启动应用失败:" + e);
- return false;
- }
- },
-
- switchToApp: function(appName) {
- try {
- LogManager.info("切换到应用:" + appName);
- // 使用 OCR 查找并点击应用图标
- var image = ScreenManager.captureFull();
- if (!image) return false;
-
- var ocrResult = ScreenManager.recognizeText(image);
- if (!ocrResult) return false;
-
- var target = OcrSearchManager.findExactText(ocrResult, appName);
- if (target) {
- return ClickManager.clickOcrTarget(target);
- } else {
- LogManager.error("未找到应用:" + appName);
- return false;
- }
- } catch (e) {
- LogManager.error("切换应用失败:" + e);
- return false;
- }
- }
- };
- /**
- * 数据管理器 - Map 存储/历史记录
- */
- var DataManager = {
- dataMap: null,
- history: [],
-
- init: function() {
- if (typeof Map !== "undefined") {
- this.dataMap = new Map();
- LogManager.debug("Map 初始化成功");
- } else {
- this.dataMap = { keys: [], values: [] };
- LogManager.debug("降级 Map 初始化成功");
- }
- },
-
- put: function(key, value) {
- try {
- if (this.dataMap.add) {
- this.dataMap.add(key, value);
- } else {
- var index = this.dataMap.keys.indexOf(key);
- if (index === -1) {
- this.dataMap.keys.push(key);
- this.dataMap.values.push(value);
- } else {
- this.dataMap.values[index] = value;
- }
- }
- LogManager.debug("存储数据:" + key + " = " + value);
- } catch (e) {
- LogManager.error("存储数据失败:" + e);
- }
- },
-
- get: function(key) {
- try {
- if (this.dataMap.get) {
- return this.dataMap.get(key);
- } else {
- var index = this.dataMap.keys.indexOf(key);
- return index !== -1 ? this.dataMap.values[index] : null;
- }
- } catch (e) {
- LogManager.error("获取数据失败:" + e);
- return null;
- }
- },
-
- addHistory: function(action) {
- if (!GlobalConfig.enableHistory) return;
-
- this.history.push({
- action: action,
- timestamp: Date.now()
- });
-
- // 限制历史记录数量
- if (this.history.length > 100) {
- this.history.shift();
- }
-
- LogManager.debug("添加历史记录:" + action);
- },
-
- getHistory: function() {
- return this.history;
- }
- };
- // ==================== 第四部分:高级功能模块 ====================
- /**
- * 自动化任务引擎
- */
- var AutomationEngine = {
- isRunning: false,
- currentTask: null,
-
- startTask: function(taskName, taskFunction) {
- if (this.isRunning) {
- LogManager.warning("已有任务正在运行");
- return false;
- }
-
- try {
- this.isRunning = true;
- this.currentTask = taskName;
- LogManager.info("开始任务:" + taskName);
- DataManager.addHistory("启动任务:" + taskName);
-
- taskFunction();
-
- LogManager.success("任务完成:" + taskName);
- DataManager.addHistory("完成任务:" + taskName);
- } catch (e) {
- LogManager.error("任务执行失败:" + e);
- } finally {
- this.isRunning = false;
- this.currentTask = null;
- }
- },
-
- stopTask: function() {
- if (!this.isRunning) {
- LogManager.warning("没有正在运行的任务");
- return;
- }
-
- LogManager.info("停止任务:" + this.currentTask);
- this.isRunning = false;
- DataManager.addHistory("停止任务:" + this.currentTask);
- }
- };
- /**
- * 智能决策系统
- */
- var AIDecisionSystem = {
- decide: function(options) {
- if (!GlobalConfig.enableAI) {
- return options[0]; // 返回第一个选项
- }
-
- // 根据权重随机选择
- var totalWeight = 0;
- for (var i = 0; i < options.length; i++) {
- totalWeight += (options[i].weight || 1);
- }
-
- var random = RandomHelper.randFloat(0, totalWeight);
- var currentWeight = 0;
-
- for (var i = 0; i < options.length; i++) {
- currentWeight += (options[i].weight || 1);
- if (random <= currentWeight) {
- LogManager.debug("AI 决策选择:" + (options[i].name || ("选项" + i)));
- return options[i];
- }
- }
-
- return options[0];
- },
-
- analyze: function(ocrResult) {
- if (!GlobalConfig.enableAI) return null;
-
- try {
- // ✅ 修正:调用 OcrSearchManager.getAllText 而不是 this.getAllText
- var texts = OcrSearchManager.getAllText(ocrResult);
- LogManager.info("AI 分析:" + texts.length + " 个文本元素");
-
- // 简单分析逻辑(可扩展为复杂 AI)
- return {
- textCount: texts.length,
- keywords: this.extractKeywords(texts),
- confidence: 0.8
- };
- } catch (e) {
- LogManager.error("AI 分析失败:" + e);
- return null;
- }
- },
-
- extractKeywords: function(texts) {
- var keywords = ["确定", "取消", "开始", "设置", "下一步"];
- var found = [];
-
- for (var i = 0; i < texts.length; i++) {
- for (var j = 0; j < keywords.length; j++) {
- if (texts[i].indexOf(keywords[j]) !== -1) {
- found.push(texts[i]);
- }
- }
- }
-
- return found;
- }
- };
- // ==================== 第五部分:实战案例演示 ====================
- /**
- * 案例 1: 自动启动应用并导航
- */
- function demo_autoLaunchAndNavigate() {
- LogManager.info("=== 案例 1: 自动启动应用并导航 ===");
-
- var targetApp = "微信";
-
- // 步骤 1: 启动应用
- if (!AppManager.launchApp(targetApp)) {
- LogManager.error("启动失败,终止流程");
- return;
- }
-
- sleep(3000);
-
- // 步骤 2: 截图识别
- var image = ScreenManager.captureFull();
- if (!image) return;
-
- var ocrResult = ScreenManager.recognizeText(image);
- if (!ocrResult) return;
-
- // 步骤 3: 查找并点击目标按钮
- var targetBtn = OcrSearchManager.findIncludeText(ocrResult, "发现");
- if (targetBtn) {
- ClickManager.clickOcrTarget(targetBtn);
- LogManager.success("已进入发现页面");
- }
-
- sleep(2000);
-
- // 步骤 4: 向下滑动浏览
- SwipeManager.swipeVertical(0.5, 0.8, 0.2);
-
- LogManager.success("案例 1 完成");
- }
- /**
- * 案例 2: 智能循环任务
- */
- function demo_smartLoopTask() {
- LogManager.info("=== 案例 2: 智能循环任务 ===");
-
- var maxLoops = 5;
- var loopCount = 0;
-
- while (loopCount < maxLoops) {
- loopCount++;
- LogManager.info("第 " + loopCount + " 次循环");
-
- // 截图分析
- var image = ScreenManager.captureFull();
- var ocrResult = ScreenManager.recognizeText(image);
-
- // AI 决策
- var analysis = AIDecisionSystem.analyze(ocrResult);
- if (analysis && analysis.keywords.length > 0) {
- LogManager.info("AI 检测到关键词:" + analysis.keywords.join(", "));
- }
-
- // 随机滑动
- var direction = RandomHelper.randBool() ? "up" : "down";
- if (direction === "up") {
- SwipeManager.swipeVertical(0.5, 0.8, 0.2);
- } else {
- SwipeManager.swipeVertical(0.5, 0.2, 0.8);
- }
-
- sleep(RandomHelper.randInt(1000, 2000));
-
- // 记录历史
- DataManager.addHistory("循环 " + loopCount);
- }
-
- LogManager.success("案例 2 完成,共循环 " + loopCount + " 次");
- }
- /**
- * 案例 3: 多步骤表单填写
- */
- function demo_formAutomation() {
- LogManager.info("=== 案例 3: 多步骤表单填写 ===");
-
- var formData = {
- username: "test_user",
- password: "123456",
- confirm: true
- };
-
- // 步骤 1: 找到输入框并点击
- var image = ScreenManager.captureFull();
- var ocrResult = ScreenManager.recognizeText(image);
-
- var inputField = OcrSearchManager.findIncludeText(ocrResult, "用户名");
- if (inputField) {
- ClickManager.clickOcrTarget(inputField);
- sleep(500);
-
- // 模拟输入 (实际需要使用 hid.inputSimple)
- LogManager.info("输入用户名:" + formData.username);
- // hid.inputSimple(formData.username);
- }
-
- sleep(1000);
-
- // 步骤 2: 查找密码框
- var passwordField = OcrSearchManager.findIncludeText(ocrResult, "密码");
- if (passwordField) {
- ClickManager.clickOcrTarget(passwordField);
- sleep(500);
-
- LogManager.info("输入密码");
- // hid.inputSimple(formData.password);
- }
-
- sleep(1000);
-
- // 步骤 3: 勾选复选框 (如果有)
- if (formData.confirm) {
- var checkbox = OcrSearchManager.findIncludeText(ocrResult, "同意");
- if (checkbox) {
- ClickManager.clickOcrTarget(checkbox);
- LogManager.info("已勾选同意协议");
- }
- }
-
- sleep(1000);
-
- // 步骤 4: 点击提交按钮
- var submitBtn = OcrSearchManager.findExactText(ocrResult, "登录");
- if (submitBtn) {
- ClickManager.clickOcrTarget(submitBtn);
- LogManager.success("表单提交完成");
- }
- }
- /**
- * 案例 4: 错误处理与自愈
- */
- function demo_errorRecovery() {
- LogManager.info("=== 案例 4: 错误处理与自愈 ===");
-
- var retryCount = 0;
- var maxRetry = GlobalConfig.maxRetryTimes;
- var success = false;
-
- while (!success && retryCount < maxRetry) {
- try {
- retryCount++;
- LogManager.info("第 " + retryCount + " 次尝试");
-
- // 模拟可能失败的操作
- var image = ScreenManager.captureFull();
- if (!image) {
- throw new Error("截图失败");
- }
-
- var ocrResult = ScreenManager.recognizeText(image);
- if (!ocrResult) {
- throw new Error("OCR 失败");
- }
-
- // 查找目标
- var target = OcrSearchManager.findIncludeText(ocrResult, "目标按钮");
- if (!target) {
- throw new Error("未找到目标");
- }
-
- // 点击
- if (ClickManager.clickOcrTarget(target)) {
- success = true;
- LogManager.success("操作成功");
- } else {
- throw new Error("点击失败");
- }
-
- } catch (e) {
- LogManager.error("尝试失败:" + e);
-
- if (retryCount < maxRetry) {
- LogManager.info("等待后重试...");
- sleep(2000);
- } else {
- LogManager.error("达到最大重试次数,放弃");
- }
- }
- }
-
- if (success) {
- LogManager.success("案例 4 完成(自愈成功)");
- } else {
- LogManager.error("案例 4 失败(无法恢复)");
- }
- }
- // ==================== 第六部分:主程序入口 ====================
- /**
- * 初始化系统
- */
- function initSystem() {
- LogManager.info("╔════════════════════════════════════════════╗");
- LogManager.info("║ AIWROK 智能应用管理器 Pro Max ║");
- LogManager.info("║ 版本:" + GlobalConfig.version + " ║");
- LogManager.info("║ 作者:" + GlobalConfig.author + " ║");
- LogManager.info("╚════════════════════════════════════════════╝");
-
- sleep(1000);
-
- // 初始化各模块
- ScreenManager.init();
- DataManager.init();
-
- LogManager.success("系统初始化完成");
- sleep(1000);
- }
- /**
- * 主函数
- */
- function main() {
- // 初始化
- initSystem();
-
- // 选择要执行的案例
- var demos = [
- { name: "案例 1: 自动启动应用并导航", func: demo_autoLaunchAndNavigate },
- { name: "案例 2: 智能循环任务", func: demo_smartLoopTask },
- { name: "案例 3: 多步骤表单填写", func: demo_formAutomation },
- { name: "案例 4: 错误处理与自愈", func: demo_errorRecovery }
- ];
-
- // 执行所有演示
- for (var i = 0; i < demos.length; i++) {
- LogManager.info("\n>>> 准备执行:" + demos[i].name);
- sleep(2000);
-
- AutomationEngine.startTask(demos[i].name, demos[i].func);
-
- sleep(3000);
- }
-
- // 显示统计信息
- LogManager.info("\n╔════════════════════════════════════════════╗");
- LogManager.info("║ 所有演示完成! ║");
- LogManager.info("╚════════════════════════════════════════════╝");
-
- var history = DataManager.getHistory();
- LogManager.info("历史记录数量:" + history.length);
-
- // 输出历史
- for (var i = 0; i < Math.min(5, history.length); i++) {
- LogManager.debug(history[i].action);
- }
- }
- // 运行主程序
- main();
- /**
- * ============================================
- * 扩展说明:
- *
- * 1. 添加新功能:
- * - 在对应 Manager 中添加方法
- * - 遵循现有代码风格
- *
- * 2. 自定义任务:
- * - 参考 demo_* 函数结构
- * - 组合使用各 Manager 功能
- *
- * 3. 调试技巧:
- * - 设置 GlobalConfig.debugMode = true
- * - 查看 LogManager.debug 输出
- *
- * 4. 性能优化:
- * - 启用 OCR 锁减少重复截图
- * - 合理设置延迟时间
- *
- * 5. 最佳实践:
- * - 总是进行错误处理
- * - 记录关键操作日志
- * - 使用重试机制提高稳定性
- * ============================================
- */
复制代码
| |  | |  |
|