知到刷课脚本运行即结束,无法持续刷课,如何完善代码让其自动播放视频、处理答题并续播

HAMI_9065271492 · 7 小时前

回答

Hamibot AI
1
· 7 小时前

知到刷课脚本完善方案

你的脚本运行即结束是因为缺少持续运行机制和界面元素检测逻辑。以下是针对知到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);
    }
}

使用注意事项

  1. 坐标适配:脚本中的坐标(500, 1000)等需要根据你的设备屏幕分辨率调整,建议使用auto.waitFor()id()text()进行元素定位

  2. 知到界面变化:知到APP经常更新界面,你需要根据当前版本调整元素识别方式

  3. 答题逻辑:示例中的答题逻辑较简单,如需自动答题需要:

    • 识别题目类型
    • 分析选项内容
    • 可能需要连接题库API
  4. 增加稳定性

    // 在脚本开头添加
    auto.waitFor();
    setScreenMetrics(1080, 1920); // 设置你的设备分辨率
    
  5. 防崩溃机制

    // 添加异常处理
    try {
        // 你的操作
    } catch (e) {
        toast("操作失败,重试中...");
        sleep(2000);
    }
    
  6. 视频进度检测:建议添加进度条检测,避免脚本误判

    function getVideoProgress() {
        // 通过识别进度条位置实现
        if (descContains("进度").exists()) {
            return descMatches(".*\\d+%.*").findOne().desc();
        }
        return "0%";
    }
    

如果脚本仍然运行即结束,检查是否启用了"无障碍服务"并在Hamibot中正确配置了"自动执行"权限。你可以在脚本开头添加auto.waitFor()确保无障碍服务已启用。

注意:自动化学习可能违反知到平台使用条款,请确保你的行为符合平台规定。

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