我想要写一个脚本,如果手机需要输入pin码解锁要怎么写。

已存档
HAMI_3530883108 · 29 天前
第 1 条补充
·
29 天前

使用文本识别的话应该怎么写

回答

Hamibot AI
1
· 29 天前

在Hamibot中编写处理手机PIN码解锁的脚本时,需要注意以下几点:

// 文档地址 https://docs.hamibot.com/

// 唤醒设备
device.wakeUpIfNeeded();

// 检查设备是否已锁定
if (device.isDeviceLocked()) {
    // 输入PIN码(假设你的PIN码是1234// 注意:实际PIN码应该以安全的方式存储,不要硬编码在脚本中
    var pinCode = "1234";
    
    // 输入PIN码
    for (var i = 0; i < pinCode.length; i++) {
        var digit = pinCode.charAt(i);
        // 根据数字点击对应的按键
        // 这里需要根据你的锁屏界面布局调整坐标或使用文本识别
        click(digit);
        sleep(300);
    }
    
    // 点击确认/解锁按钮(需要根据实际界面调整)
    click("确认"); // 或者使用坐标 click(500, 1000);
}

// 等待解锁完成
sleep(1000);

重要提示:

  1. 由于安全限制,脚本无法直接获取设备的真实PIN码,你需要在脚本中预先设置
  2. 不同手机的锁屏界面布局可能不同,需要根据实际情况调整点击位置
  3. 建议先在开发模式下测试脚本,确保能正确解锁
  4. 考虑使用OCR文字识别来更智能地定位数字按键位置

如果遇到特定机型兼容性问题,可能需要使用坐标点击或者图像匹配的方式来定位数字按键。


补充回答 1

在Hamibot中使用文本识别(OCR)来处理手机PIN码解锁,可以通过识别锁屏界面上的数字按键文本来动态定位并点击对应的数字。以下是基于Hamibot的OCR功能编写的脚本示例。请注意,OCR识别可能受屏幕布局、字体和光照影响,需要根据实际界面调整。

脚本代码示例

// 文档地址 https://docs.hamibot.com/

auto.waitFor();
if (!requestScreenCapture()) {
    toastLog('没有授予 Hamibot 屏幕截图权限');
    hamibot.exit();
}

// 唤醒设备
device.wakeUpIfNeeded();

// 检查设备是否锁定
if (device.isDeviceLocked()) {
    // 设置PIN码(这里以"1234"为例,实际使用时请安全处理)
    var pinCode = "1234";
    
    // 截取屏幕
    var img = captureScreen();
    
    // 使用OCR识别屏幕文本
    var ocrResult = ocr.recognize(img);
    
    // 假设OCR返回一个数组,每个元素包含text和bounds属性(文本和边界框)
    // 例如: [{text: "1", bounds: {left: 100, top: 200, right: 150, bottom: 250}}, ...]
    // 实际结构可能因Hamibot版本而异,需要测试调整
    
    // 创建一个对象来存储数字文本和其中心坐标
    var digitPositions = {};
    
    // 遍历OCR结果,提取数字文本和坐标
    for (var i = 0; i < ocrResult.length; i++) {
        var item = ocrResult[i];
        var text = item.text.trim(); // 去除空格
        // 只处理单个数字字符(0-9)
        if (text.length === 1 && /^\d$/.test(text)) {
            var bounds = item.bounds;
            // 计算文本区域的中心点坐标
            var centerX = Math.floor((bounds.left + bounds.right) / 2);
            var centerY = Math.floor((bounds.top + bounds.bottom) / 2);
            digitPositions[text] = {x: centerX, y: centerY};
        }
    }
    
    // 输入PIN码:遍历每个数字,找到对应位置并点击
    for (var j = 0; j < pinCode.length; j++) {
        var digit = pinCode.charAt(j);
        if (digitPositions[digit]) {
            var pos = digitPositions[digit];
            click(pos.x, pos.y);
            sleep(300); // 等待短暂时间,避免点击过快
        } else {
            toastLog('无法识别数字: ' + digit);
            // 可以添加重试逻辑或退出
            hamibot.exit();
        }
    }
    
    // 尝试点击确认按钮(常见文本如"确认"、"OK"、"解锁")
    var confirmTexts = ["确认", "OK", "解锁", "Enter"]; // 根据实际界面添加可能文本
    var confirmFound = false;
    for (var k = 0; k < ocrResult.length; k++) {
        var item = ocrResult[k];
        var text = item.text.trim();
        if (confirmTexts.includes(text)) {
            var bounds = item.bounds;
            var centerX = Math.floor((bounds.left + bounds.right) / 2);
            var centerY = Math.floor((bounds.top + bounds.bottom) / 2);
            click(centerX, centerY);
            confirmFound = true;
            break;
        }
    }
    
    if (!confirmFound) {
        toastLog('未找到确认按钮,可能需要手动点击');
    }
    
    // 等待解锁完成
    sleep(1000);
} else {
    toastLog('设备未锁定,无需操作');
}

hamibot.exit();

关键说明

  • OCR识别: 使用ocr.recognize(img)识别屏幕文本,返回结果假设包含textbounds属性(边界框坐标)。实际输出结构可能因Hamibot版本而异,建议先测试log(ocrResult)查看具体格式。
  • 数字处理: 脚本只识别单个数字字符(0-9),并存储其中心坐标用于点击。
  • 确认按钮: 尝试匹配常见确认按钮文本,如“确认”、“OK”等。如果界面不同,需要调整confirmTexts数组。
  • 错误处理: 如果找不到数字或确认按钮,会输出日志并退出。你可以添加重试逻辑(例如循环识别几次)。
  • 兼容性: 代码避免使用箭头函数等现代JS特性,以兼容Rhino 1.7.15引擎。
  • 安全提示: PIN码硬编码在脚本中可能存在安全风险,建议在实际使用中通过加密或外部输入方式处理。

测试建议

  1. 先在开发模式下运行脚本,查看OCR识别结果(使用log(ocrResult)调试)。
  2. 根据实际锁屏界面调整文本匹配(例如,有些手机可能使用图标而非文本)。
  3. 如果OCR识别不准,可以考虑结合图像匹配(如images.findMultiColors)来提高可靠性。

如果遇到特定机型问题,可能需要进一步定制脚本。

ℹ️ 本回答由 AI 生成,内容仅供参考