You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

JavaScript无法检索更新HTML及Kahoot自动答题脚本开发咨询

如何在Kahoot中自动判断答题对错?

嘿,这个Kahoot小项目挺有意思的!你已经搞定了自动点击红色选项的部分,接下来判断答题结果其实可以通过监听页面DOM的变化来实现——毕竟Kahoot在你提交答案后,会通过元素样式、类名或者新提示元素来反馈对错,我们只要抓住这些变化就行。

核心思路:观察DOM变化

Kahoot答题后,页面会有明显的DOM更新:比如正确选项会变绿、错误选项变红,或者弹出“Correct!”/“Wrong!”的提示。我们可以用JavaScript的MutationObserver API来监听这些变化,从而判断答题结果。

步骤1:先确认Kahoot的DOM结构(关键!)

首先你需要打开浏览器开发者工具(按F12),自己观察:

  • 答题前,选项按钮的结构(比如类名、data属性)
  • 答题后,正确/错误的按钮会新增什么类名?页面有没有出现新的提示元素?

比如Kahoot常用data-test属性标记关键元素:正确答案的提示可能带有data-test="correct",错误的则是data-test="incorrect";选项按钮在答对后也会添加特定类(比如correct)。

步骤2:实现自动点击+结果检测的代码

下面是一个通用的示例代码,你可以根据自己观察到的DOM结构调整选择器:

// 记录答题统计
let correctCount = 0;
let wrongCount = 0;

// 封装点击红色选项并启动结果监听的函数
function answerWithRedOption() {
  // 获取红色选项(假设它是页面上第一个button,你可以根据实际调整选择器)
  const redOption = document.getElementsByTagName("button")[0];
  if (!redOption) return;
  
  console.log('🔴 点击红色选项');
  redOption.click();
  
  // 启动结果监听
  startResultObserver();
}

// 监听答题结果的函数
function startResultObserver() {
  const observer = new MutationObserver((mutations) => {
    // 检查是否出现正确/错误提示
    const correctElement = document.querySelector('[data-test="correct"]');
    const wrongElement = document.querySelector('[data-test="incorrect"]');
    
    if (correctElement) {
      correctCount++;
      console.log(`✅ 答对了!当前答对:${correctCount},答错:${wrongCount}`);
      observer.disconnect(); // 停止监听,准备下一题
    } else if (wrongElement) {
      wrongCount++;
      console.log(`❌ 答错了!当前答对:${correctCount},答错:${wrongCount}`);
      observer.disconnect();
    }

    // 备用方案:检查选项按钮的类变化(如果提示元素没出现的话)
    const answeredRedBtn = document.getElementsByTagName("button")[0];
    if (answeredRedBtn) {
      if (answeredRedBtn.classList.contains('correct')) {
        correctCount++;
        console.log(`✅ 红色选项答对!统计:${correctCount}/${correctCount+wrongCount}`);
        observer.disconnect();
      } else if (answeredRedBtn.classList.contains('incorrect')) {
        wrongCount++;
        console.log(`❌ 红色选项答错!统计:${correctCount}/${correctCount+wrongCount}`);
        observer.disconnect();
      }
    }
  });

  // 监听整个页面的DOM变化(可以缩小范围到Kahoot的答题容器,提升性能)
  observer.observe(document.body, {
    childList: true,
    subtree: true,
    attributes: true,
    attributeFilter: ['class'] // 只监听类属性变化,减少不必要的触发
  });
}

// 监听新题加载,自动触发答题
const questionObserver = new MutationObserver((mutations) => {
  mutations.forEach(() => {
    // 检查是否出现了未答题的选项(比如按钮没有answered类)
    const redOption = document.getElementsByTagName("button")[0];
    if (redOption && !redOption.classList.contains('answered')) {
      answerWithRedOption();
    }
  });
});

questionObserver.observe(document.body, {
  childList: true,
  subtree: true
});

// 第一次加载时自动答题
answerWithRedOption();

注意事项

  1. DOM结构可能变化:Kahoot偶尔会更新页面结构,如果代码突然失效,记得重新用开发者工具检查元素的类名/属性,调整选择器。
  2. 避免频繁触发MutationObserver会监听很多变化,所以尽量缩小监听范围(比如只监听Kahoot的答题容器,而不是整个body),或者用attributeFilter过滤不必要的属性变化。
  3. 统计功能:代码里已经加了答对/答错的计数,你可以根据需求扩展(比如导出统计结果)。

内容的提问来源于stack exchange,提问作者Andrew

火山引擎 最新活动