回答
知到刷课脚本完善方案
你的脚本运行即结束是因为缺少持续运行机制和界面元素检测逻辑。以下是针对知到APP刷课的完善方案:
// 文档地址 https://docs.hamibot.com/
// 启动知到APP
launchApp("知到");
// 设置脚本持续运行
events.on("exit", function() {
toast("脚本已停止运行");
});
// 主循环函数
function mainLoop() {
// 检查是否在课程页面
if (text("目录").exists() || text("课程").exists()) {
// 点击进入第一个未完成课程
var incomplete = textContains("未完成").findOne(2000);
if (incomplete) {
incomplete.parent().click();
sleep(3000);
}
}
// 检查视频播放状态
checkAndPlayVideo();
// 检查是否有答题弹窗
handleQuizPopup();
// 检查是否播放完成
if (checkVideoCompleted()) {
toast("当前视频已完成,进入下一节");
goToNextSection();
}
}
// 检查并播放视频
function checkAndPlayVideo() {
// 尝试点击播放按钮(根据实际界面调整坐标)
if (id("play_btn").exists() || text("播放").exists()) {
click(500, 1000);
toast("开始播放视频");
sleep(2000);
}
}
// 处理答题弹窗
function handleQuizPopup() {
// 检测常见答题弹窗元素
if (textContains("题目").exists() || textContains("单选题").exists() || textContains("多选题").exists()) {
toast("检测到答题弹窗,开始处理");
// 等待界面稳定
sleep(1000);
// 点击第一个选项(根据实际情况修改)
click(300, 600);
sleep(500);
// 点击确认按钮
if (text("确定").exists()) {
text("确定").findOne().click();
} else if (id("submit").exists()) {
id("submit").findOne().click();
}
toast("答题完成");
sleep(2000);
}
}
// 检查视频是否完成
function checkVideoCompleted() {
// 根据知到界面特点检测完成状态
// 可能的完成标志:进度条满、显示"已完成"文字、出现"下一节"按钮等
if (text("已完成").exists() || text("下一节").exists() || id("next_btn").exists()) {
return true;
}
return false;
}
// 进入下一节
function goToNextSection() {
if (text("下一节").exists()) {
text("下一节").findOne().click();
} else if (id("next_btn").exists()) {
id("next_btn").findOne().click();
} else {
// 尝试使用坐标点击(需根据你的设备调整)
press(900, 1800, 100);
}
sleep(3000);
}
// 主循环 - 持续运行
while (true) {
try {
mainLoop();
// 每30秒检查一次
sleep(30000);
} catch (e) {
toast("发生错误: " + e.message);
sleep(5000);
}
}
使用注意事项
-
坐标适配:脚本中的坐标(500, 1000)等需要根据你的设备屏幕分辨率调整,建议使用
auto.waitFor()和id()或text()进行元素定位 -
知到界面变化:知到APP经常更新界面,你需要根据当前版本调整元素识别方式
-
答题逻辑:示例中的答题逻辑较简单,如需自动答题需要:
- 识别题目类型
- 分析选项内容
- 可能需要连接题库API
-
增加稳定性:
// 在脚本开头添加 auto.waitFor(); setScreenMetrics(1080, 1920); // 设置你的设备分辨率 -
防崩溃机制:
// 添加异常处理 try { // 你的操作 } catch (e) { toast("操作失败,重试中..."); sleep(2000); } -
视频进度检测:建议添加进度条检测,避免脚本误判
function getVideoProgress() { // 通过识别进度条位置实现 if (descContains("进度").exists()) { return descMatches(".*\\d+%.*").findOne().desc(); } return "0%"; }
如果脚本仍然运行即结束,检查是否启用了"无障碍服务"并在Hamibot中正确配置了"自动执行"权限。你可以在脚本开头添加auto.waitFor()确保无障碍服务已启用。
注意:自动化学习可能违反知到平台使用条款,请确保你的行为符合平台规定。
ℹ️ 本回答由 AI 生成,内容仅供参考