有没有自动点击, 自动识别脚本库的问题和答案。自行上传问题和答案。
自动做答题。并返回重新点击自动做答题。
开始后,定时30分钟后完成自动答题

913767248_E5nv · 2 天前
第 1 条补充
·
2 天前

比如说他答题完成之后,系统继续重新返回到初始界面,
重新做答两道题。剩下的题目30分钟后继续做

回答

Hamibot AI
1
· 2 天前

Hamibot可以实现自动答题功能,但需要根据具体答题界面设计脚本。以下是实现思路和关键代码示例:

自动答题系统实现步骤

  1. 问题识别模块

    // 文档地址 https://docs.hamibot.com/
    function identifyQuestion() {
        // 截取问题区域(需根据实际界面调整坐标)
        var questionRegion = images.captureScreen();
        // 使用OCR识别问题文本(需要开启无障碍服务)
        var questionText = ocr.recognize(questionRegion);
        return questionText;
    }
    
  2. 答案库管理模块

    // 文档地址 https://docs.hamibot.com/
    // 本地答案库(可替换为从服务器获取)
    var answerDatabase = {
        "中国首都是哪里": "北京",
        "太阳系最大的行星": "木星"
        // 更多问题答案对...
    };
    
    function getAnswer(question) {
        // 简单匹配(实际应用需更复杂的匹配算法)
        for (var q in answerDatabase) {
            if (question.indexOf(q) !== -1) {
                return answerDatabase[q];
            }
        }
        return null;
    }
    
  3. 自动点击模块

    // 文档地址 https://docs.hamibot.com/
    function autoAnswer() {
        var question = identifyQuestion();
        var answer = getAnswer(question);
        
        if (answer) {
            // 根据答案内容查找并点击选项
            clickAnswerOption(answer);
        }
    }
    
    function clickAnswerOption(answerText) {
        // 这里需要根据实际界面实现选项定位
        // 示例:假设已知选项坐标
        setScreenMetrics(1080, 1920);
        // 根据答案内容决定点击哪个选项
        if (answerText === "A") click(500, 800);
        if (answerText === "B") click(500, 900);
        // ...其他选项
    }
    
  4. 定时执行模块

    // 文档地址 https://docs.hamibot.com/
    function startAutoAnswer() {
        // 设置30分钟后停止
        var stopTime = new Date().getTime() + 30 * 60 * 1000;
        
        // 每5秒检查一次问题
        var interval = setInterval(function() {
            if (new Date().getTime() > stopTime) {
                clearInterval(interval);
                toast("自动答题已结束");
                return;
            }
            autoAnswer();
        }, 5000);
        
        toast("自动答题已启动,30分钟后自动停止");
    }
    
    // 启动自动答题
    startAutoAnswer();
    

重要提示

  1. 坐标适配:使用setScreenMetrics()确保脚本在不同设备上正常工作(参考知识库[1])

    setScreenMetrics(1080, 1920); // 设置设计时的屏幕分辨率
    
  2. 答案库更新

    • 本地答案库:可将答案库保存在/sdcard/hamibot/scripts/answers.json
    • 远程答案库:通过API获取(参考知识库[3]的API调用方式)
  3. 启动方式

    • 创建新脚本(参考知识库[2])
    • 使用engines.execScriptFile()调用(参考知识库[4])
  4. 合法使用

    • 自动答题可能违反某些平台服务条款
    • 仅建议用于自动化测试或个人辅助学习

30分钟后自动停止实现

// 文档地址 https://docs.hamibot.com/
var startTime = new Date().getTime();
var duration = 30 * 60 * 1000; // 30分钟

// 检查是否超时的函数
function checkTime() {
    return new Date().getTime() - startTime < duration;
}

// 在主要循环中加入时间检查
while(checkTime()) {
    autoAnswer();
    sleep(5000); // 每5秒检查一次
}
toast("自动答题任务已完成");
engines.stopAll(); // 停止所有脚本

注意:实际实现需要根据具体答题界面调整识别逻辑和点击坐标,建议先使用Hamibot的"录制"功能获取准确操作序列。


补充回答 1

根据你的需求,我设计了一个更精确的自动答题脚本方案,可以实现"完成2题→返回初始界面→等待30分钟→继续答题"的循环逻辑:

完整解决方案

// 文档地址 https://docs.hamibot.com/
// 自动答题系统(分批处理模式)
requestScreenCapture();

// 全局变量
var completedQuestions = 0; // 已完成题目计数
var batchCount = 2; // 每批处理题目数量
var pauseDuration = 30 * 60 * 1000; // 30分钟暂停时间

// 答案库(实际使用时可替换为外部存储)
var answerDB = {
    "中国四大发明": "指南针、造纸术、印刷术、火药",
    "地球是": "行星",
    // 更多问题答案...
};

function isOnQuestionPage() {
    // 检测是否在答题界面(根据实际界面调整)
    var img = captureScreen();
    return images.findColor(img, "#FF0000", {
        region: [500, 1500, 200, 200],
        threshold: 4
    }) != null;
}

function isOnStartPage() {
    // 检测是否在初始界面(根据实际界面调整)
    var img = captureScreen();
    return images.findColor(img, "#0052CC", {
        region: [500, 1000, 200, 200],
        threshold: 4
    }) != null;
}

function navigateToStart() {
    // 返回初始界面的多种方法(按需选择)
    // 方法1:模拟返回键
    back();
    sleep(1000);
    
    // 方法2:使用Shell命令
    shell("am start -n com.example.app/.MainActivity", true);
    
    // 方法3:点击首页按钮
    if (!isOnStartPage()) {
        click(540, 1800); // 底部导航栏首页按钮位置
        sleep(2000);
    }
    
    // 确认已回到初始界面
    if (isOnStartPage()) {
        toast("已返回初始界面");
        return true;
    }
    return false;
}

function answerOneQuestion() {
    // 1. 识别问题
    var questionImg = captureScreen();
    var questionText = ocr.recognizeText(questionImg).text;
    
    // 2. 查找答案
    var answer = null;
    for (var q in answerDB) {
        if (questionText.indexOf(q) !== -1) {
            answer = answerDB[q];
            break;
        }
    }
    
    // 3. 点击答案
    if (answer) {
        var options = ["A", "B", "C", "D"];
        for (var i = 0; i < options.length; i++) {
            if (questionText.indexOf(answer + options[i]) !== -1) {
                // 根据选项位置点击(需根据实际界面调整坐标)
                click(500, 800 + i * 200);
                sleep(1000);
                // 点击"确定"按钮
                click(540, 1600);
                return true;
            }
        }
    }
    return false;
}

function processBatch() {
    // 处理一批题目(2题)
    for (var i = 0; i < batchCount; i++) {
        if (!isOnQuestionPage()) {
            toast("不在答题界面,尝试返回...");
            if (!navigateToStart()) {
                toast("无法返回初始界面,终止脚本");
                hamibot.exit();
            }
            // 从初始界面开始新任务
            click(540, 1200); // 假设开始答题按钮在屏幕中央下方
            sleep(3000);
        }
        
        if (answerOneQuestion()) {
            completedQuestions++;
            toast("已答 " + completedQuestions + " 题");
            sleep(2000); // 等待答案反馈
        } else {
            toast("未识别问题,跳过");
        }
    }
    
    // 返回初始界面
    if (navigateToStart()) {
        // 记录当前进度
        files.write("/sdcard/hamibot/progress.txt", completedQuestions);
        
        // 显示剩余时间
        toast("完成" + batchCount + "题,30分钟后继续");
        
        // 等待30分钟(使用更稳定的计时方式)
        var startTime = new Date().getTime();
        while (new Date().getTime() - startTime < pauseDuration) {
            var remaining = Math.floor((pauseDuration - (new Date().getTime() - startTime)) / 1000);
            if (remaining % 60 === 0) {
                toast("剩余时间: " + (remaining / 60) + "分钟");
            }
            sleep(10000); // 每10秒更新一次
        }
        
        // 30分钟后继续
        processBatch(); // 递归调用
    }
}

// 启动脚本
function main() {
    // 检查是否有之前的进度
    var progressFile = "/sdcard/hamibot/progress.txt";
    if (files.exists(progressFile)) {
        completedQuestions = parseInt(files.read(progressFile));
        toast("继续上次进度: " + completedQuestions + "题");
    }
    
    toast("自动答题系统启动(每" + batchCount + "题暂停30分钟)");
    processBatch();
}

// 执行主函数
main();

关键功能说明

  1. 批次处理机制

    • 每次只处理2道题(通过batchCount变量控制)
    • 使用递归调用processBatch()实现循环
    • 每完成一批题目后自动返回初始界面
  2. 进度保存

    // 保存进度到文件
    files.write("/sdcard/hamibot/progress.txt", completedQuestions);
    
    // 读取进度
    if (files.exists(progressFile)) {
        completedQuestions = parseInt(files.read(progressFile));
    }
    
  3. 界面导航

    • isOnQuestionPage() 检测是否在答题界面
    • isOnStartPage() 检测是否在初始界面
    • navigateToStart() 实现多方式返回初始界面
  4. 30分钟精确计时

    var startTime = new Date().getTime();
    while (new Date().getTime() - startTime < pauseDuration) {
        // 显示剩余时间
        sleep(10000);
    }
    

使用说明

  1. 首次使用前

    • 在Hamibot中授权"截屏"和"无障碍"服务
    • 根据实际答题界面调整坐标参数
    • 更新answerDB答案库内容
  2. 运行流程

    1. 脚本启动后自动从初始界面开始
    2. 完成2道题后自动返回初始界面
    3. 显示倒计时30分钟
    4. 30分钟后自动继续答题
  3. 界面适配要点

    • 使用setScreenMetrics(1080, 1920)确保坐标准确
    • 通过images.findColor()检测关键界面元素
    • 使用shell("am start...")实现可靠界面跳转

注意事项

  1. 实际使用时需要根据具体答题APP界面调整:

    • 问题区域的OCR识别范围
    • 选项按钮的坐标位置
    • "确定"、"下一题"等按钮的位置
  2. 对于复杂的答题界面,建议:

    • 先使用Hamibot的"录制"功能获取准确操作序列
    • images.save()保存关键界面截图用于调试
  3. 如果答题APP有防作弊机制,可能需要:

    • 增加随机操作间隔
    • 模拟更自然的操作轨迹
    • 添加错误处理机制

这个方案确保了答题过程符合你要求的"2题→返回→30分钟→继续"的循环模式,同时具备进度保存和界面自动识别功能。

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