回答
你的问题是因为脚本执行完就自动退出了,没有持续运行的机制。要实现知到课程的自动播放、答题处理和续播功能,你需要一个完整的循环监控机制。下面提供一个基础框架:
// 文档地址 https://docs.hamibot.com/
// 启用无障碍服务
auto.waitFor();
// 设置脚本不随悬浮窗关闭而退出
window.exitOnClose(false);
// 主循环
while (true) {
// 检测是否在课程详情页(需要根据实际情况调整坐标和检测方式)
if (id("course_detail").exists()) {
// 点击播放按钮(坐标需要你自己确定)
press(500, 1500, 100);
toast("开始播放视频");
sleep(2000);
}
// 检测答题弹窗
if (id("question_container").exists() || textContains("单选题").exists()) {
toast("检测到答题,正在处理");
// 简单处理:点击第一个选项(实际应用中可能需要更复杂的逻辑)
press(300, 1000, 100);
sleep(500);
// 点击确认按钮
press(900, 1800, 100);
toast("已提交答案");
sleep(2000);
}
// 检测视频是否播放完毕(根据"继续学习"按钮判断)
if (text("继续学习").exists()) {
toast("视频播放完成,即将进入下一节");
// 点击继续学习按钮
text("继续学习").findOne().click();
sleep(3000);
}
// 防止CPU占用过高
sleep(1000);
// 添加退出条件(比如按音量减键退出脚本)
events.observeKey();
events.on('key_down', function(keyCode, event) {
if (keyCode === keys.volume_down) {
toast("脚本已停止");
exit();
}
});
}
// 脚本退出处理
events.on('exit', function() {
toast("脚本已安全退出");
});
几点重要说明:
-
坐标需要自行校准:上面代码中的坐标(500,1500)等都需要你通过Hamibot的"屏幕取色"功能获取实际坐标
-
界面识别优化:
- 建议使用
id()或text()等更稳定的识别方式替代纯坐标点击 - 可以使用
className()、desc()等多重条件确保准确识别元素
- 建议使用
-
答题逻辑完善:
- 简单脚本可以固定选第一个答案
- 复杂场景建议使用OCR识别题目和选项
- 或使用Hamibot的"图像识别"功能匹配答案图片
-
防检测措施:
- 添加随机等待时间:
sleep(2000 + random(0, 3000)) - 模拟真实用户操作节奏,不要过于机械
- 添加随机等待时间:
-
必备设置:
- 确保开启"无障碍服务"
- 设置脚本"前台服务"避免后台被杀
- 在Hamibot设置中开启"保持屏幕常亮"
注意:不同版本的知到APP界面可能不同,你需要根据实际界面调整元素识别方式。建议先使用Hamibot的"控件捕获"功能分析目标界面的元素结构,再编写针对性的识别代码。
如果需要更精确的实现,你应该针对当前使用的知到APP版本,使用Hamibot的"脚本录制"功能录制基本操作流程,然后在生成的代码基础上添加循环和状态判断逻辑。
ℹ️ 本回答由 AI 生成,内容仅供参考