本文将详细介绍如何使用冰狐智能辅助平台,结合 OCR 文字识别和 HID 点击技术,实现对图形列表的自动顺序点击功能。
一、核心技术原理
1. 冰狐智能辅助平台
冰狐智能辅助是一款一站式自动化脚本解决方案。对于不懂编程的用户,可以使用“智能构建脚本”功能通过搭积木方式配置参数生成脚本;对于开发者,则可以使用 JavaScript 编写更复杂的自动化脚本。其优势在于不需要连接电脑和手机即可实现实时在线、远程开发调试,且移动端 JS 脚本永久免费。
冰狐智能辅助使用的 JavaScript 是标准 ECMAScript (JavaScript) 的一个子集,比标准 JavaScript 简单很多,即使没有编程基础的同学也能很快掌握。它支持标准 JavaScript 函数库,支持多线程并发编程,支持在线编辑、动态部署并立即生效。
2. OCR 文字识别技术
OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字转换为可编辑文本信息的技术。在自动化脚本中,OCR 主要用于识别界面上的文本内容,返回识别到的文字及其坐标位置,非常适合基于文字内容定位目标元素的场景。
3. HID 点击技术
HID(Human Interface Device)是一种常见的接口协议,用于连接鼠标、键盘等设备。在自动化脚本中,可以通过模拟 HID 设备来实现点击操作。HID 点击的核心在于准确定位目标坐标并模拟鼠标事件(如按下和释放)。
二、实现步骤
本节将详细说明实现图形列表自动点击功能的具体步骤。
1. 环境准备与配置
注册冰狐账号并创建脚本:
访问冰狐智能辅助官网,注册账号并创建新的 JavaScript 脚本项目。开启必要的权限:
- 在手机上开启冰狐智能辅助的无障碍权限。
- 如需使用冰狐输入法输入文本,需在手机设置中启用它。
准备 OCR 和 HID 功能:
- 确保冰狐平台中 OCR 相关 API(如
ocr
)可用。 - 确定采用的点击方式(无障碍、HID、ADB 等),本例中以无障碍为例。
- 确保冰狐平台中 OCR 相关 API(如
2. 实现自动点击图形列表的功能
步骤 1:获取屏幕内容并识别文字
使用冰狐的 OCR 功能捕获当前屏幕图像,并识别出所有图形下方的文字及其坐标。
function main() {
// 使用冰狐的OCR功能识别屏幕上的文字及其位置
var ocrResult = ocr({region:[0, 0, 1, 1});
// 参数通常为识别区域的左上角和右下角坐标
// ocrResult 返回一个数组,每个元素包含识别到的文字和其边界框(坐标)
console.log('OCR识别结果: ', ocrResult);
}
步骤 2:过滤和排序识别结果
根据图形列表的特点(每行4个图形,每个图形下方有文字),对 OCR 识别结果进行过滤和排序,确定点击顺序。
function main() {
// ... OCR识别代码 ...
// 假设每个图形下方的文字是唯一的,并且用于标识该图形
// 1. 定义我们感兴趣的文本(根据实际需求调整)
var targetTexts = ['图形1', '图形2', '图形3', '图形4', '图形5']; // 按顺序列出所有期望的文字
// 2. 过滤出目标文本
var recognizedItems = [];
for (var i = 0; i < ocrResult.length; i++) {
var item = ocrResult[i];
// 检查当前识别项的文字是否在目标文本列表中
for (var j = 0; j < targetTexts.length; j++) {
if (item.text == targetTexts[j]) {
recognizedItems.push(item);
break;
}
}
}
// 3. 根据OCR结果中的坐标信息排序(从上到下,从左到右)
// 首先按Y坐标排序(行)
for (var i = 0; i < recognizedItems.length - 1; i++) {
for (var j = i + 1; j < recognizedItems.length; j++) {
if (recognizedItems[j].region[1] < recognizedItems[i].region[1]) {
var temp = recognizedItems[i];
recognizedItems[i] = recognizedItems[j];
recognizedItems[j] = temp;
}
}
}
// 然后对同一行内的项按X坐标排序(从左到右)
var startIdx = 0;
while (startIdx < recognizedItems.length) {
var currentY = recognizedItems[startIdx].region[1];
var endIdx = startIdx + 1;
// 找到同一行内的所有项
while (endIdx < recognizedItems.length &&
Math.abs(recognizedItems[endIdx].region[1] - currentY) < 20) { // 20是Y坐标的容差阈值
endIdx++;
}
// 对当前行内的项按X坐标排序
for (var i = startIdx; i < endIdx - 1; i++) {
for (var j = i + 1; j < endIdx; j++) {
if (recognizedItems[j].region[0] < recognizedItems[i].region[0]) {
var temp = recognizedItems[i];
recognizedItems[i] = recognizedItems[j];
recognizedItems[j] = temp;
}
}
}
startIdx = endIdx;
}
console.log('排序后的识别结果: ', recognizedItems);
}
步骤 3:实现点击操作
遍历排序后的识别结果,使用冰狐的无障碍 API 在相应坐标执行点击操作。
function main() {
// ... 前面的代码 ...
// 遍历所有识别出的目标项并点击
for (var i = 0; i < recognizedItems.length; i++) {
var item = recognizedItems[i];
// 计算要点击的坐标:文字上方通常是图形,这里假设图形在文字正上方一定偏移量处
// 偏移量需要根据实际UI调整
var clickX = item.region[0] + item.region[2]/ 2; // 点击文字区域中心点的X坐标
var clickY = item.region[1] - 50; // 点击文字上方一定距离(例如50像素)的点,假设为图形位置
// 执行点击操作
click(clickX, clickY);
// 在每次点击后添加适当的延迟,等待界面反应
delay(1000); // 延迟1秒
}
}
步骤 4:处理屏幕滚动
当需要点击的图形不在当前屏幕时,需要实现滚动操作。
function main() {
// ... 前面的代码 ...
// 在点击完当前屏幕的所有图形后,执行滚动操作
// 假设向下滚动,滚动量需要根据实际UI调整
scroll(null, 'up', {type: 2, distance: 0.55, afterWait: 3000});
// 在500ms内完成滑动操作
// 等待滚动完成及新内容加载
delay(2000); // 延迟2秒
// 滚动后,重新执行OCR识别和点击步骤
// 这里可以将上述步骤封装成函数以便重复调用
}
3. 完整脚本流程整合
将上述步骤整合到一个循环中,实现完整的自动点击流程:
function main() {
var maxScrollAttempts = 5; // 防止无限滚动
var scrollCount = 0;
var allClicked = false;
while (!allClicked && scrollCount < maxScrollAttempts) {
// 1. OCR识别
var ocrResult = ocr({region: [0, 0, 1, 1]});
// 2. 过滤和排序
var recognizedItems = [];
for (var i = 0; i < ocrResult.length; i++) {
var item = ocrResult[i];
for (var j = 0; j < targetTexts.length; j++) {
if (item.text == targetTexts[j]) {
recognizedItems.push(item);
break;
}
}
}
// 排序代码(同上,此处省略)
if (recognizedItems.length === 0) {
// 如果没有识别到目标,可能需要滚动或结束
console.log('未识别到目标图形,尝试滚动');
} else {
// 3. 点击当前屏幕的图形
for (var i = 0; i < recognizedItems.length; i++) {
var item = recognizedItems[i];
var clickX = item.region[0] + item.region[2] / 2;
var clickY = item.region[1] - 50;
click(clickX, clickY);
delay(1000);
// 从目标文本列表中移除已点击的项,避免重复点击
for (var j = 0; j < targetTexts.length; j++) {
if (targetTexts[j] == item.text) {
targetTexts.splice(j, 1);
break;
}
}
}
}
// 检查是否所有目标都已点击
if (targetTexts.length == 0) {
allClicked = true;
console.log('所有图形已点击完毕');
break;
}
// 4. 滚动屏幕以加载更多内容
scroll(null, 'up', {type: 2, distance: 0.55, afterWait: 3000});
delay(2000);
scrollCount++;
}
if (!allClicked) {
console.log('滚动达到最大次数,但仍有图形未点击');
} else {
console.log('任务完成');
}
}
三、优化与注意事项
OCR 准确性问题:
- 预处理:如果 OCR 识别率低,可以尝试对图像进行预处理,如调整对比度或灰度化。
- 置信度阈值:检查 OCR 结果中的置信度分数,仅处理高分值结果。
动态界面处理:
- 等待机制:在滚动和点击后添加足够的延迟(
delay
),确保界面稳定。 - 异常处理:添加重试机制,例如点击失败后重试若干次。
- 等待机制:在滚动和点击后添加足够的延迟(
兼容性与性能:
- 屏幕适配:考虑不同分辨率的设备,使用相对坐标或百分比坐标。
- 脚本效率:避免不必要的 OCR 调用,因为它可能是计算密集型操作。(考虑重用ocr结果,前提是画面不变)
遵守规则:
- 确保自动化操作符合相关应用的服务条款和法律法规。
四、结语
通过冰狐智能辅助平台,结合 OCR 文字识别和 HID 点击技术,并使用基本的 JavaScript 语法,我们可以高效地实现图形列表的自动顺序点击功能。这种方案避免了依赖固定坐标带来的脆弱性,通过识别文字内容来定位目标,显著提高了脚本的适应性和可靠性。
冰狐平台提供的 OCR、无障碍操作和模拟点击 API 使得整个开发过程变得更加简单。开发者可以根据实际需求,灵活调整策略,例如处理更复杂的界面布局或集成其他冰狐支持的技术。
希望本文能为您提供有价值的参考,祝您的自动化脚本开发顺利!