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();
注意事项
- DOM结构可能变化:Kahoot偶尔会更新页面结构,如果代码突然失效,记得重新用开发者工具检查元素的类名/属性,调整选择器。
- 避免频繁触发:
MutationObserver会监听很多变化,所以尽量缩小监听范围(比如只监听Kahoot的答题容器,而不是整个body),或者用attributeFilter过滤不必要的属性变化。 - 统计功能:代码里已经加了答对/答错的计数,你可以根据需求扩展(比如导出统计结果)。
内容的提问来源于stack exchange,提问作者Andrew




