我想用hamibot开发安卓自动化脚本,设定某个时间点,程序先识别屏幕上的文字,找到并点击屏幕上的Zerotier Fix字样,然后用悬浮窗显示有没有点击成功或者未识别到(悬浮窗口显示具体的日志内容)请用如下的配置信息进行程序设计
[
{
"name": "start_time",
"type": "text",
"label": "开始执行时间",
"validation": "required",
"help": "设置程序开始执行的时间,格式:HH:MM(如:14:30)"
},
{
"name": "target_text",
"type": "text",
"label": "目标文字",
"validation": "required",
"help": "需要点击的文字内容(如:Zerotier Fix)"
},
{
"name": "log_interval",
"type": "range",
"label": "日志输出间隔",
"min": 1,
"max": 300,
"help": "脚本日志输出的时间间隔,单位:秒",
"show-value": true
},
{
"name": "stop_duration",
"type": "range",
"label": "运行时长",
"min": 1,
"max": 1440,
"help": "脚本停止运行的时间,单位:分钟(1440分钟=24小时)",
"show-value": true
}
]

已存档
3mfrpmn6r4 · 7 天前

回答

Hamibot AI
1
· 7 天前
// 文档地址 https://docs.hamibot.com/
auto.waitFor(); // 请求无障碍权限

// 获取配置参数
var start_time = $config.start_time;
var target_text = $config.target_text;
var log_interval = $config.log_interval;
var stop_duration = $config.stop_duration;

// 将开始时间转换为分钟数
var start_hour = parseInt(start_time.split(':')[0]);
var start_minute = parseInt(start_time.split(':')[1]);
var start_total_minutes = start_hour * 60 + start_minute;

// 获取当前时间
function getCurrentTimeInMinutes() {
    var now = new Date();
    return now.getHours() * 60 + now.getMinutes();
}

// 检查当前时间是否达到开始时间
function isStartTimeReached() {
    var current_minutes = getCurrentTimeInMinutes();
    return current_minutes >= start_total_minutes;
}

// 等待到开始时间
while (!isStartTimeReached()) {
    sleep(60000); // 每分钟检查一次
}

// 记录开始时间
var start_time_stamp = new Date().getTime();

// 运行时长(毫秒)
var run_duration_ms = stop_duration * 60 * 1000;

// 日志窗口
var log_window = floaty.rawWindow(<canvas id="canvas" />);
log_window.setSize(-1, -1);
log_window.setPosition(0, 0);
log_window.setTouchable(false);

// 绘制日志窗口的画笔
var log_paint = new Paint();
log_paint.setColor(colors.parseColor('#000000'));
log_paint.setTextSize(20);
log_paint.setAlpha(200);

// 日志内容
var log_content = "";

// 添加日志内容
function addLog(message) {
    log_content += message + "\n";
    log_window.canvas.on('draw', function (canvas) {
        canvas.drawColor(colors.parseColor('#ffffff')); // 白色背景
        canvas.drawText(log_content, 10, 30, log_paint);
    });
}

// 查找并点击目标文字
function findAndClickTarget(text) {
    var bounds = text(text).findOne();
    if (bounds) {
        click(bounds.centerX(), bounds.centerY());
        addLog("成功找到并点击了 \"" + text + "\"");
        return true;
    } else {
        addLog("未找到 \"" + text + "\"");
        return false;
    }
}

// 主循环
while (true) {
    // 检查是否超时
    var current_time_stamp = new Date().getTime();
    if (current_time_stamp - start_time_stamp > run_duration_ms) {
        break;
    }

    // 查找并点击目标文字
    var success = findAndClickTarget(target_text);

    // 等待指定的日志输出间隔
    sleep(log_interval * 1000);
}

// 关闭日志窗口
log_window.close();
ℹ️ 本回答由 AI 生成,内容仅供参考