使用冰狐智能辅助实现图形列表自动点击:OCR与HID技术详解

发布于:2025-09-06 ⋅ 阅读:(22) ⋅ 点赞:(0)

本文将详细介绍如何使用冰狐智能辅助平台,结合 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. 环境准备与配置

  1. 注册冰狐账号并创建脚本​:
    访问冰狐智能辅助官网,注册账号并创建新的 JavaScript 脚本项目。

  2. 开启必要的权限​:

    • 在手机上开启冰狐智能辅助的无障碍权限
    • 如需使用冰狐输入法输入文本,需在手机设置中启用它。
  3. 准备 OCR 和 HID 功能​:

    • 确保冰狐平台中 OCR 相关 API(如 ocr)可用。
    • 确定采用的点击方式(无障碍、HID、ADB 等),本例中以无障碍为例。

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('任务完成');
  }
}

三、优化与注意事项

  1. OCR 准确性问题​:

    • 预处理​:如果 OCR 识别率低,可以尝试对图像进行预处理,如调整对比度或灰度化。
    • 置信度阈值​:检查 OCR 结果中的置信度分数,仅处理高分值结果。
  2. 动态界面处理​:

    • 等待机制​:在滚动和点击后添加足够的延迟(delay),确保界面稳定
    • 异常处理​:添加重试机制,例如点击失败后重试若干次。
  3. 兼容性与性能​:

    • 屏幕适配​:考虑不同分辨率的设备,使用相对坐标或百分比坐标。
    • 脚本效率​:避免不必要的 OCR 调用,因为它可能是计算密集型操作。(考虑重用ocr结果,前提是画面不变)
  4. 遵守规则​:

    • 确保自动化操作符合相关应用的服务条款和法律法规。

四、结语

通过冰狐智能辅助平台,结合 OCR 文字识别和 HID 点击技术,并使用基本的 JavaScript 语法,我们可以高效地实现图形列表的自动顺序点击功能。这种方案避免了依赖固定坐标带来的脆弱性,通过识别文字内容来定位目标,​显著提高了脚本的适应性和可靠性

冰狐平台提供的 OCR、无障碍操作和模拟点击 API 使得整个开发过程变得更加简单。开发者可以根据实际需求,灵活调整策略,例如处理更复杂的界面布局或集成其他冰狐支持的技术。

希望本文能为您提供有价值的参考,祝您的自动化脚本开发顺利!


网站公告

今日签到

点亮在社区的每一天
去签到