有没有自动点击, 自动识别脚本库的问题和答案。自行上传问题和答案。
自动做答题。并返回重新点击自动做答题。
开始后,定时30分钟后完成自动答题
第 1 条补充
· 2 天前
比如说他答题完成之后,系统继续重新返回到初始界面,
重新做答两道题。剩下的题目30分钟后继续做
回答
Hamibot可以实现自动答题功能,但需要根据具体答题界面设计脚本。以下是实现思路和关键代码示例:
自动答题系统实现步骤
-
问题识别模块
// 文档地址 https://docs.hamibot.com/ function identifyQuestion() { // 截取问题区域(需根据实际界面调整坐标) var questionRegion = images.captureScreen(); // 使用OCR识别问题文本(需要开启无障碍服务) var questionText = ocr.recognize(questionRegion); return questionText; } -
答案库管理模块
// 文档地址 https://docs.hamibot.com/ // 本地答案库(可替换为从服务器获取) var answerDatabase = { "中国首都是哪里": "北京", "太阳系最大的行星": "木星" // 更多问题答案对... }; function getAnswer(question) { // 简单匹配(实际应用需更复杂的匹配算法) for (var q in answerDatabase) { if (question.indexOf(q) !== -1) { return answerDatabase[q]; } } return null; } -
自动点击模块
// 文档地址 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); // ...其他选项 } -
定时执行模块
// 文档地址 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();
重要提示
-
坐标适配:使用
setScreenMetrics()确保脚本在不同设备上正常工作(参考知识库[1])setScreenMetrics(1080, 1920); // 设置设计时的屏幕分辨率 -
答案库更新:
- 本地答案库:可将答案库保存在
/sdcard/hamibot/scripts/answers.json - 远程答案库:通过API获取(参考知识库[3]的API调用方式)
- 本地答案库:可将答案库保存在
-
启动方式:
- 创建新脚本(参考知识库[2])
- 使用
engines.execScriptFile()调用(参考知识库[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();
关键功能说明
-
批次处理机制
- 每次只处理2道题(通过
batchCount变量控制) - 使用递归调用
processBatch()实现循环 - 每完成一批题目后自动返回初始界面
- 每次只处理2道题(通过
-
进度保存
// 保存进度到文件 files.write("/sdcard/hamibot/progress.txt", completedQuestions); // 读取进度 if (files.exists(progressFile)) { completedQuestions = parseInt(files.read(progressFile)); } -
界面导航
isOnQuestionPage()检测是否在答题界面isOnStartPage()检测是否在初始界面navigateToStart()实现多方式返回初始界面
-
30分钟精确计时
var startTime = new Date().getTime(); while (new Date().getTime() - startTime < pauseDuration) { // 显示剩余时间 sleep(10000); }
使用说明
-
首次使用前:
- 在Hamibot中授权"截屏"和"无障碍"服务
- 根据实际答题界面调整坐标参数
- 更新
answerDB答案库内容
-
运行流程:
- 脚本启动后自动从初始界面开始
- 完成2道题后自动返回初始界面
- 显示倒计时30分钟
- 30分钟后自动继续答题
-
界面适配要点:
- 使用
setScreenMetrics(1080, 1920)确保坐标准确 - 通过
images.findColor()检测关键界面元素 - 使用
shell("am start...")实现可靠界面跳转
- 使用
注意事项
-
实际使用时需要根据具体答题APP界面调整:
- 问题区域的OCR识别范围
- 选项按钮的坐标位置
- "确定"、"下一题"等按钮的位置
-
对于复杂的答题界面,建议:
- 先使用Hamibot的"录制"功能获取准确操作序列
- 用
images.save()保存关键界面截图用于调试
-
如果答题APP有防作弊机制,可能需要:
- 增加随机操作间隔
- 模拟更自然的操作轨迹
- 添加错误处理机制
这个方案确保了答题过程符合你要求的"2题→返回→30分钟→继续"的循环模式,同时具备进度保存和界面自动识别功能。
ℹ️ 本回答由 AI 生成,内容仅供参考