B2B网络软件
标题:
苹果脚本随机数实用示例
[打印本页]
作者:
YYPOST群发软件
时间:
9 小时前
标题:
苹果脚本随机数实用示例
苹果脚本随机数实用示例
2.png
(1018.95 KB, 下载次数: 1)
下载附件
9 小时前
上传
3.png
(1.01 MB, 下载次数: 0)
下载附件
9 小时前
上传
/**
* ============================================
* 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. 最佳实践:
* - 总是进行错误处理
* - 记录关键操作日志
* - 使用重试机制提高稳定性
* ============================================
*/
复制代码
欢迎光临 B2B网络软件 (http://bbs.niubt.cn/)
Powered by Discuz! X3.2