怎么做拟人化点击

已存档
kc9eftvnag · 16 天前

回答

Hamibot AI
1
· 16 天前

在Hamibot中实现“拟人化点击”通常指的是模拟人类操作的自然性,包括添加随机延迟(避免固定时间间隔)和随机位置偏移(避免每次都点击完全相同的位置)。这可以帮助避免被系统检测为自动化脚本,提高任务的可靠性。以下是几种实现方式,根据你的设备权限(如root权限)和需求选择合适的方法。

方法1: 使用RootAutomator进行坐标点击(需要root权限)

RootAutomator允许精确控制点击坐标,你可以添加随机延迟和偏移。这是最灵活的方案。

// 文档地址 https://docs.hamibot.com/
// 初始化RootAutomator
var ra = new RootAutomator();
// 确保脚本退出时清理资源
events.on('exit', function() {
    ra.exit();
});

// 示例:找到目标控件(这里以文本"按钮"为例)
var widget = text("按钮").findOne();
var bounds = widget.bounds(); // 获取控件边界

// 在控件边界内生成随机坐标
var x = Math.floor(bounds.left + Math.random() * (bounds.right - bounds.left));
var y = Math.floor(bounds.top + Math.random() * (bounds.bottom - bounds.top));

// 添加随机延迟(500-2000毫秒)
sleep(Math.floor(Math.random() * 1500) + 500);

// 执行点击
ra.tap(x, y);

// 脚本结束时会自动调用ra.exit()

说明

  • 需要root权限。如果没有root,此方法会失败。
  • bounds()返回控件的边界区域(left, top, right, bottom),我们在这个区域内随机生成点击点。
  • 随机延迟使用sleep()实现,范围可调整。

方法2: 使用图像识别点击(不需要root,但需要屏幕截图权限)

通过图像识别找到目标位置,然后添加随机偏移和延迟。适用于控件无法通过文本或属性定位的情况。

// 文档地址 https://docs.hamibot.com/
// 请求屏幕截图权限
auto.waitFor();
if (!requestScreenCapture()) {
    toastLog('没有授予屏幕截图权限');
    hamibot.exit();
}
sleep(1000); // 等待截图准备

// 示例:查找特定图像(这里以找Hamibot图标为例)
var img = captureScreen();
var p = images.findMultiColors(
    img,
    '#0052CC', // 基准颜色
    [
        [5, 5, '#0052CC'],
        [10, 10, '#0052CC'],
    ]
);

if (p) {
    // 添加随机偏移(-5到5像素)
    var offsetX = Math.floor(Math.random() * 11) - 5;
    var offsetY = Math.floor(Math.random() * 11) - 5;
    var targetX = p.x + offsetX;
    var targetY = p.y + offsetY;

    // 添加随机延迟(500-2000毫秒)
    sleep(Math.floor(Math.random() * 1500) + 500);

    // 点击坐标
    click(targetX, targetY); // 假设click(x, y)可用
} else {
    toastLog('未找到目标图像');
}

说明

  • 不需要root权限,但需要屏幕截图权限。
  • images.findMultiColors用于识别图像,你需要调整颜色参数以匹配目标。
  • click(x, y)在Hamibot中通常可用,但确保坐标在屏幕范围内。

方法3: 使用控件点击 with 随机延迟(不需要root,但点击位置固定)

如果无法控制点击坐标,可以仅添加随机延迟来模拟人类操作节奏。这是最简单的方法,但点击位置是控件的默认点(通常为中心)。

// 文档地址 https://docs.hamibot.com/
// 添加随机延迟(0-2000毫秒)
sleep(Math.floor(Math.random() * 2000));

// 点击文本控件(示例点击第一个"扫一扫")
var success = click("扫一扫", 0);
if (!success) {
    toastLog('点击失败');
}

说明

  • 不需要特殊权限,但点击位置由系统决定,无法添加偏移。
  • 适合简单场景,拟人化程度较低。

最佳实践建议

  • 组合使用:你可以结合多种方法,例如先使用图像识别定位,再用RootAutomator点击。
  • 调整随机范围:根据实际需求调整延迟和偏移的范围(例如,人类操作延迟通常在500-2000ms,偏移在±5像素内)。
  • 错误处理:添加重试逻辑,例如在点击失败时重新尝试。
  • 避免过度随机:太大的偏移可能点击错误区域,建议在小范围内随机。

如果你有更多具体场景(如特定应用或控件),可以提供详细信息,我可以给出更定制化的方案。

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