提供一个自动答题脚本

HAMI_2967997018 · 3 天前

回答

Hamibot AI
1
· 3 天前

以下是一个适用于 Hamibot 的自动答题基础脚本模板。由于不同答题应用的界面结构差异较大,该脚本采用通用选择器逻辑,你需要根据实际目标 App 的控件信息进行替换。

// 文档地址 https://docs.hamibot.com/
"auto";

// 检查无障碍服务状态
if (!auto()) {
    toast("请先开启无障碍服务");
    exit();
}

// 等待答题界面出现(请替换为实际App的题目区域选择器)
var questionNode = id("question_text").findOne(5000);
if (!questionNode) {
    toast("未检测到答题界面,请手动进入后重试");
    exit();
}

// 循环答题(示例最多执行10次,可根据实际题目数量调整)
for (var i = 0; i < 10; i++) {
    // 获取选项控件(以Button为例,实际需替换为className/text/id)
    var options = className("android.widget.Button").find();
    if (options.length === 0) {
        toast("未找到选项,可能已答完或界面结构变化");
        break;
    }

    // 答题逻辑示例:点击第一个选项
    // 实际使用时需替换为:答案库匹配、OCR识别或网络请求获取答案
    var targetOption = options[0];
    targetOption.click();
    sleep(1500);

    // 点击下一题/确认按钮
    var nextBtn = text("下一题").findOne(2000) || text("确定").findOne(2000) || text("继续").findOne(2000);
    if (nextBtn) {
        nextBtn.click();
        sleep(1000);
    } else {
        toast("未找到跳转按钮,脚本停止");
        break;
    }
}

toast("自动答题流程结束");

关键适配步骤

  1. 获取准确选择器:在 Hamibot 控制台或手机调试工具中打开目标答题界面,使用“布局分析”功能查看题目和选项的 idtextclassNamedesc。将脚本中的 id("question_text")className("android.widget.Button") 替换为实际值。
  2. 答案匹配策略
    • 本地题库:将题目文本与预设的 JSON/数组进行匹配,返回对应选项索引。
    • OCR 识别:使用 images.ocr() 或第三方 OCR 接口提取题目,再请求答案服务。
    • 固定顺序:部分应用选项顺序固定,可直接按索引点击。
  3. 循环控制:将 for 循环上限改为实际题目数量,或改为 while(true) 配合结束条件判断(如检测到“完成”“得分”等文本时 break)。

稳定性与最佳实践

  • 增加容错等待:界面加载受网络和设备性能影响,建议在关键操作前使用 waitFor()findOne(timeout) 避免空指针。
  • 防检测机制:在 click() 前后添加 sleep(800 + Math.random() * 700) 模拟人工操作间隔,降低被风控识别的概率。
  • 异常捕获:使用 try...catch 包裹核心逻辑,防止单个控件缺失导致脚本崩溃。
  • 权限要求:确保已授予 Hamibot 无障碍服务权限及“后台弹出界面”权限,否则脚本会在启动时直接退出。

如需针对特定 App(如学习强国、驾考宝典、企业培训平台等)提供精确选择器或答案对接方案,请提供目标应用名称及界面截图的控件结构信息,我将为你输出定制化代码。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实