B2B网络软件
标题:
苹果脚本屏幕事件EVENT示例
[打印本页]
作者:
YYPOST群发软件
时间:
7 小时前
标题:
苹果脚本屏幕事件EVENT示例
苹果脚本屏幕事件EVENT示例
1.png
(660.12 KB, 下载次数: 0)
下载附件
7 小时前
上传
2.png
(718.39 KB, 下载次数: 0)
下载附件
7 小时前
上传
3.png
(755.68 KB, 下载次数: 0)
下载附件
7 小时前
上传
/**
* ============================================
* AIWROK 屏幕自动化实战案例教学
* 版本:1.0.0
* 平台:iOS (AIWROK)
* QQ 群:711841924 群一,苹果内测群 528816639
* ============================================
*
* 教学目标:
* 1. 📖 掌握 OCR 文本识别与点击
* 2. 🎯 学会找图定位与交互
* 3. 🖱️ 理解多种点击方式的应用场景
* 4. ⚙️ 构建完整的自动化流程
* 5. 🛡️ 错误处理与稳定性优化
*/
// ==================== 第一部分:基础准备 ====================
/**
* 工具函数定义
*/
function sleep(ms) {
var start = Date.now();
while (Date.now() - start < ms) {
// 阻塞等待
}
}
function printl(msg) {
console.log(msg);
}
/**
* 全局配置对象
*/
var Config = {
appName: "屏幕自动化实战教学",
version: "1.0.0",
debugMode: true,
defaultRegion: [0, 0, 1, 1], // 默认全屏
clickDelay: 500, // 点击延迟 (ms)
retryTimes: 3, // 默认重试次数
ocrLockEnabled: false // OCR 锁定开关
};
// ==================== 第二部分:核心技能模块 ====================
/**
* 模块 1: OCR 文本识别基础
*/
var OCRModule = {
/**
* 任务 1.1: 获取屏幕所有文本
*/
getAllText: function() {
printl("\n【任务 1.1】获取屏幕所有文本");
try {
// 方式 1: 使用 screen.ocr() (快捷方式)
var ocrResult = screen.ocr(0, 0, 1, 1);
var allText = ocrResult.getAllString();
printl("识别到的文本内容:\n" + allText);
printl("文本长度:" + allText.length);
return allText;
} catch (e) {
printl("错误:" + e);
return "";
}
},
/**
* 任务 1.2: 查找特定文本(使用 findIncludeText)
*/
findText: function(targetText) {
printl("\n【任务 1.2】查找特定文本:" + targetText);
try {
var ocrResult = screen.ocr(0, 0, 1, 1);
// 使用 findIncludeText 代替 findText
var detect = ocrResult.findIncludeText(targetText, Config.defaultRegion);
if (detect != null) {
printl("✓ 找到目标对象");
// 使用 getRect() 获取位置
var rect = detect.getRect();
printl("位置信息:左=" + rect.getLeft() + ", 上=" + rect.getTop());
printl("尺寸信息:宽=" + rect.getWidth() + ", 高=" + rect.getHeight());
printl("中心点:(" + rect.getCenterX() + ", " + rect.getCenterY() + ")");
return detect;
} else {
printl("✗ 未找到文本:" + targetText);
return null;
}
} catch (e) {
printl("错误:" + e);
return null;
}
},
/**
* 任务 1.3: 查找包含特定文本的多个目标
*/
findIncludeTexts: function(keyword) {
printl("\n【任务 1.3】查找包含关键词的所有目标:" + keyword);
try {
var ocrResult = screen.ocr(0, 0, 1, 1);
var targets = ocrResult.findIncludeTexts(keyword, Config.defaultRegion);
if (targets && targets.length > 0) {
printl("找到 " + targets.length + " 个包含 '" + keyword + "' 的目标对象");
for (var i = 0; i < Math.min(5, targets.length); i++) {
var rect = targets[i].getRect();
printl(" [" + (i+1) + "] 位置:(" + rect.getCenterX().toFixed(3) + ", " + rect.getCenterY().toFixed(3) + ")");
}
return targets;
} else {
printl("未找到包含 '" + keyword + "' 的目标");
return [];
}
} catch (e) {
printl("错误:" + e);
return [];
}
},
/**
* 任务 1.4: 使用正则表达式查找
*/
findWithRegex: function(regex) {
printl("\n【任务 1.4】使用正则表达式查找:" + regex);
try {
var ocrResult = screen.ocr(0, 0, 1, 1);
var targets = ocrResult.findTextWithRegex(regex, Config.defaultRegion);
if (targets && targets.length > 0) {
printl("✓ 找到 " + targets.length + " 个匹配项");
for (var i = 0; i < Math.min(3, targets.length); i++) {
var rect = targets[i].getRect();
printl(" [" + (i+1) + "] 位置:(" + rect.getCenterX().toFixed(3) + ", " + rect.getCenterY().toFixed(3) + ")");
}
return targets;
} else {
printl("✗ 未找到匹配项");
return [];
}
} catch (e) {
printl("错误:" + e);
return [];
}
}
};
/**
* 模块 2: 点击操作核心
*/
var ClickModule = {
/**
* 任务 2.1: 绝对坐标点击
*/
clickAbsolute: function(x, y) {
printl("\n【任务 2.1】绝对坐标点击:(" + x + ", " + y + ")");
try {
hid.click(x, y);
sleep(Config.clickDelay);
printl("✓ 点击成功");
} catch (e) {
printl("错误:" + e);
}
},
/**
* 任务 2.2: 百分比坐标点击
*/
clickPercent: function(xPercent, yPercent) {
printl("\n【任务 2.2】百分比坐标点击:(" + xPercent + ", " + yPercent + ")");
try {
hid.clickPercent(xPercent, yPercent);
sleep(Config.clickDelay);
printl("✓ 点击成功");
} catch (e) {
printl("错误:" + e);
}
},
/**
* 任务 2.3: 双击操作
*/
doubleClick: function(x, y) {
printl("\n【任务 2.3】双击操作:(" + x + ", " + y + ")");
try {
hid.doubleClick(x, y);
sleep(Config.clickDelay * 2);
printl("✓ 双击成功");
} catch (e) {
printl("错误:" + e);
}
},
/**
* 任务 2.4: 点击 OCR 识别目标
*/
clickOcrTarget: function(detect, clickType) {
printl("\n【任务 2.4】点击 OCR 识别目标");
if (!detect) {
printl("✗ 目标为空或无效,无法点击");
return false;
}
try {
if (clickType === "center") {
// 使用 getRect() 获取中心点
var rect = detect.getRect();
var centerX = rect.getCenterX();
var centerY = rect.getCenterY();
printl("点击中心点:(" + centerX + ", " + centerY + ")");
hid.click(centerX, centerY);
} else {
printl("随机点击文本区域");
detect.clickRandom();
}
sleep(Config.clickDelay);
printl("✓ 点击成功");
return true;
} catch (e) {
printl("错误:" + e);
return false;
}
},
/**
* 任务 2.5: 批量点击
*/
clickMultipleTargets: function(detects) {
printl("\n【任务 2.5】批量点击多个目标");
if (!detects || detects.length === 0) {
printl("✗ 没有可点击的目标");
return;
}
printl("准备点击 " + detects.length + " 个目标");
for (var i = 0; i < detects.length; i++) {
printl("点击目标 " + (i + 1) + "/" + detects.length);
detects[i].clickRandom();
sleep(300);
}
printl("✓ 批量点击完成");
}
};
/**
* 模块 3: 图像识别进阶
*/
var ImageModule = {
/**
* 任务 3.1: 基础找图
*/
findImage: function(cvFile) {
printl("\n【任务 3.1】基础找图:" + cvFile);
try {
var detects = opencv.findImagesEx(cvFile);
if (detects && detects.length > 0) {
printl("✓ 找到 " + detects.length + " 个目标");
for (var i = 0; i < Math.min(3, detects.length); i++) {
printl(" [" + (i+1) + "] x=" + detects[i].x + ", y=" + detects[i].y);
}
return detects;
} else {
printl("✗ 未找到目标");
return [];
}
} catch (e) {
printl("错误:" + e);
return [];
}
},
/**
* 任务 3.2: 区域找图
*/
findImageInRegion: function(cvFile, region) {
printl("\n【任务 3.2】区域找图:" + cvFile);
printl("识别区域:[" + region.join(", ") + "]");
try {
var detects = opencv.findImages([cvFile], 0.8, 3000, 1, region);
if (detects && detects.length > 0) {
printl("✓ 在区域内找到 " + detects.length + " 个目标");
return detects;
} else {
printl("✗ 区域内未找到目标");
return [];
}
} catch (e) {
printl("错误:" + e);
return [];
}
}
};
// ==================== 第三部分:综合实战案例 ====================
/**
* 实战案例 1: 智能应用启动器
*/
var AppLauncher = {
/**
* 启动单个应用
*/
launchApp: function(appName) {
printl("\n========================================");
printl("🚀 启动应用:" + appName);
printl("========================================");
for (var retry = 0; retry < Config.retryTimes; retry++) {
try {
printl("第 " + (retry + 1) + " 次尝试...");
// 1. OCR 识别
var ocrResult = screen.ocr(0, 0, 1, 1);
// 2. 查找应用名称
var appDetect = ocrResult.findIncludeText(appName, Config.defaultRegion);
if (appDetect && typeof appDetect === 'object' && appDetect.x) {
printl("✓ 找到应用图标");
// 3. 点击应用
ClickModule.clickOcrTarget(appDetect, "center");
printl("✓✓ 应用启动成功!");
return true;
} else {
printl("✗ 未找到应用,准备重试...");
sleep(1000);
}
} catch (e) {
printl("错误:" + e);
sleep(1000);
}
}
printl("✗✗ 应用启动失败(已重试 " + Config.retryTimes + " 次)");
return false;
},
/**
* 批量启动应用
*/
launchMultipleApps: function(appList) {
printl("\n========================================");
printl("📦 批量启动应用");
printl("========================================");
var successCount = 0;
for (var i = 0; i < appList.length; i++) {
printl("\n正在启动 (" + (i + 1) + "/" + appList.length + "): " + appList[i]);
if (this.launchApp(appList[i])) {
successCount++;
sleep(2000); // 应用切换等待
}
sleep(500);
}
printl("\n批量启动完成:成功 " + successCount + "/" + appList.length + " 个");
}
};
/**
* 实战案例 2: 自动化导航系统
*/
var AutoNavigator = {
/**
* 执行多步导航
*/
navigate: function(steps) {
printl("\n========================================");
printl("🧭 开始自动化导航");
printl("========================================");
for (var i = 0; i < steps.length; i++) {
var step = steps[i];
printl("\n步骤 " + (i + 1) + "/" + steps.length + ": " + step.action);
try {
if (step.action === "findAndClick") {
var ocrResult = screen.ocr(0, 0, 1, 1);
var target = ocrResult.findIncludeText(step.target, Config.defaultRegion);
if (target && typeof target === 'object' && target.x) {
ClickModule.clickOcrTarget(target, step.clickType || "random");
printl("✓ 步骤完成");
sleep(step.delay || 1000);
} else {
printl("✗ 未找到目标,导航中断");
return false;
}
} else if (step.action === "waitFor") {
printl("等待 " + step.duration + "ms...");
sleep(step.duration);
} else if (step.action === "swipe") {
this.swipe(step.direction);
printl("✓ 滑动完成");
}
} catch (e) {
printl("错误:" + e);
return false;
}
}
printl("\n✓✓ 导航完成!");
return true;
},
/**
* 滑动操作
*/
swipe: function(direction) {
try {
if (direction === "up") {
hid.swipePercent(0.5, 0.8, 0.5, 0.2);
} else if (direction === "down") {
hid.swipePercent(0.5, 0.2, 0.5, 0.8);
} else if (direction === "left") {
hid.swipePercent(0.8, 0.5, 0.2, 0.5);
} else if (direction === "right") {
hid.swipePercent(0.2, 0.5, 0.8, 0.5);
}
sleep(500);
} catch (e) {
printl("滑动错误:" + e);
}
}
};
/**
* 实战案例 3: 智能表单填写器
*/
var FormFiller = {
/**
* 自动填写表单
*/
fillForm: function(formData) {
printl("\n========================================");
printl("📝 开始填写表单");
printl("========================================");
for (var fieldName in formData) {
var fieldValue = formData[fieldName];
printl("\n填写字段:" + fieldName);
try {
// 1. 查找字段标签
var labelDetect = OCRModule.findText(fieldName, Config.defaultRegion);
if (labelDetect != null) {
// 2. 点击输入框(假设在标签下方)
var rect = labelDetect.getRect();
var inputX = rect.getCenterX();
var inputY = rect.getBottom() + 50;
ClickModule.clickAbsolute(inputX, inputY);
sleep(300);
// 3. 输入内容(需要使用输入模块)
printl("输入内容:" + fieldValue);
// 这里可以扩展输入功能
sleep(500);
} else {
printl("✗ 未找到字段标签:" + fieldName);
}
} catch (e) {
printl("错误:" + e);
}
}
printl("\n✓ 表单填写完成");
}
};
// ==================== 第四部分:高级技巧与优化 ====================
/**
* 技巧 1: OCR 锁定优化
*/
function demoOcrLock() {
printl("\n========================================");
printl("⚡ 技巧演示:OCR 锁定优化");
printl("========================================");
try {
// 锁定 OCR
OCR.lockOCR();
printl("✓ OCR 已锁定");
// 截图
var image = screen.screenShotFull();
// 多次识别(使用同一张截图)
printl("\n第一次识别...");
var result1 = image.ocr(0, 0, 1, 1);
var text1 = result1.getAllString();
printl("识别到文本长度:" + text1.length);
printl("\n第二次查找...");
var target = result1.findIncludeText("设置", Config.defaultRegion);
if (target != null) {
printl("✓ 找到目标");
}
// 释放资源
image.close();
// 解锁 OCR
OCR.unLock();
printl("✓ OCR 已解锁");
} catch (e) {
printl("错误:" + e);
try {
OCR.unLock();
} catch (unlockError) {
// 忽略解锁错误
}
}
}
/**
* 技巧 2: 安全查找(带重试机制)
*/
function safeFindText(targetText, maxRetries) {
printl("\n安全查找文本:" + targetText);
for (var retry = 0; retry < maxRetries; retry++) {
try {
printl("第 " + (retry + 1) + " 次尝试...");
var ocrResult = screen.ocr(0, 0, 1, 1);
var detect = ocrResult.findIncludeText(targetText, Config.defaultRegion);
if (detect != null) {
printl("✓ 找到目标");
return detect;
}
if (retry < maxRetries - 1) {
printl("未找到,等待重试...");
sleep(1000);
}
} catch (e) {
printl("查找出错:" + e);
if (retry < maxRetries - 1) {
sleep(2000);
}
}
}
printl("✗ 未找到目标");
return null;
}
/**
* 技巧 3: 等待目标出现
*/
function waitForTarget(targetText, maxWaitTime) {
printl("\n等待目标出现:" + targetText);
printl("最大等待时间:" + maxWaitTime + "ms");
var startTime = Date.now();
while (Date.now() - startTime < maxWaitTime) {
try {
var ocrResult = screen.ocr(0, 0, 1, 1);
var target = ocrResult.findIncludeText(targetText, Config.defaultRegion);
if (target != null) {
printl("✓ 目标出现!");
return target;
}
sleep(500);
} catch (e) {
printl("查找出错:" + e);
sleep(500);
}
}
printl("✗ 超时,目标未出现");
return null;
}
// ==================== 第五部分:完整演示流程 ====================
/**
* 演示流程 1: 基础技能综合演练
*/
function runBasicDemo() {
printl("\n");
printl("╔════════════════════════════════════════╗");
printl("║ 基础技能综合演练 ║");
printl("╚════════════════════════════════════════╝");
// 1. OCR 识别
var allText = OCRModule.getAllText();
// 2. 查找文本(示例:查找"设置")
var settingBtn = OCRModule.findText("设置");
if (settingBtn != null) {
printl("✓ 找到设置按钮,准备点击");
ClickModule.clickOcrTarget(settingBtn, "center");
} else {
printl("✗ 未找到设置按钮,跳过点击");
}
sleep(1000);
// 3. 查找多个目标(示例:查找包含"屏"的文本)
var screens = OCRModule.findIncludeTexts("屏");
if (screens && screens.length > 0) {
printl("找到 " + screens.length + " 个包含'屏'的文本,演示前 3 个");
ClickModule.clickMultipleTargets(screens.slice(0, Math.min(3, screens.length)));
}
// 4. 正则查找(示例:查找数字)
var numbers = OCRModule.findWithRegex("\\d+");
if (numbers && numbers.length > 0) {
printl("\n找到 " + numbers.length + " 个包含数字的目标");
var rect = numbers[0].getRect();
printl("第一个目标位置:(" + rect.getCenterX().toFixed(3) + ", " + rect.getCenterY().toFixed(3) + ")");
}
}
/**
* 演示流程 2: 应用启动实战
*/
function runAppLauncherDemo() {
printl("\n");
printl("╔════════════════════════════════════════╗");
printl("║ 应用启动器实战 ║");
printl("╚════════════════════════════════════════╝");
// 启动单个应用
AppLauncher.launchApp("微信");
sleep(2000);
// 批量启动
AppLauncher.launchMultipleApps(["QQ", "支付宝"]);
}
/**
* 演示流程 3: 自动化导航实战
*/
function runNavigatorDemo() {
printl("\n");
printl("╔════════════════════════════════════════╗");
printl("║ 自动化导航实战 ║");
printl("╚════════════════════════════════════════╝");
// 定义导航步骤
var steps = [
{ action: "findAndClick", target: "设置", clickType: "center", delay: 1500 },
{ action: "waitFor", duration: 1000 },
{ action: "findAndClick", target: "通用", clickType: "random", delay: 1500 },
{ action: "swipe", direction: "up" },
{ action: "waitFor", duration: 500 },
{ action: "findAndClick", target: "关于", clickType: "center" }
];
AutoNavigator.navigate(steps);
}
/**
* 演示流程 4: 高级技巧演练
*/
function runAdvancedDemo() {
printl("\n");
printl("╔════════════════════════════════════════╗");
printl("║ 高级技巧演练 ║");
printl("╚════════════════════════════════════════╝");
// 1. OCR 锁定
demoOcrLock();
// 2. 安全查找
safeFindText("确定", 3);
// 3. 等待目标
waitForTarget("取消", 5000);
}
// ==================== 主程序入口 ====================
/**
* 运行所有演示
*/
function runAllDemos() {
printl("\n");
printl("╔═══════════════════════════════════════════╗");
printl("║ 🍎 AIWROK 屏幕自动化实战案例教学 ║");
printl("║ 版本:" + Config.version + " ║");
printl("║ QQ 群:711841924 | 内测群:528816639 ║");
printl("╚═══════════════════════════════════════════╝");
sleep(1000);
// 基础技能演示
runBasicDemo();
sleep(2000);
// 应用启动器演示(注释掉,避免实际执行)
// runAppLauncherDemo();
sleep(2000);
// 导航系统演示(注释掉,避免实际执行)
// runNavigatorDemo();
sleep(2000);
// 高级技巧演示
runAdvancedDemo();
printl("\n");
printl("╔═══════════════════════════════════════════╗");
printl("║ ✓ 所有演示完成! ║");
printl("║ 祝你学习愉快! ║");
printl("╚═══════════════════════════════════════════╝");
}
/**
* 单独运行某个演示(取消注释即可)
*/
function main() {
// 运行所有演示
runAllDemos();
// 或者单独运行某个演示:
// runBasicDemo();
// runAppLauncherDemo();
// runNavigatorDemo();
// runAdvancedDemo();
}
// 执行主程序
main();
复制代码
欢迎光临 B2B网络软件 (http://bbs.niubt.cn/)
Powered by Discuz! X3.2