【提取学习通作业考试题目答案下载到本地或者POST数据库】

devtools/2024/12/27 2:50:35/

这段油猴(Tampermonkey)脚本是用来提取学习通(Chaoxing)平台上作业和考试题目的个人答案,并将其转换成Excel格式的题库,方便浏览或分享给他人。让我们逐步分析脚本的功能和结构:

脚本功能概述

  1. 样式插入 (insertStyle函数):

    • 功能:插入自定义的CSS样式,美化题库提取工具的界面。
    • 样式包括设置列表无序化、题目容器的样式、logo的样式等。
  2. 题目展示 (displayQuestions函数):

    • 功能:根据提取的题目数据,将题目和答案显示在浮动框中。
    • 使用了模板字符串构建题目列表,展示每道题的题目内容、选项、个人答案和正确答案。
  3. Excel下载 (downloadExcel函数):

    • 功能:将提取的题目数据转换为Excel文件并下载。
    • 使用了 xlsx.full.min.js 库来实现将数据转换为Excel的功能。
  4. 界面创建和拖动支持 (createMenuBoxsetupDraggableBox函数):

    • createMenuBox函数:创建了一个浮动的题目显示框,包含标题、解析和下载按钮等。
    • setupDraggableBox函数:实现了浮动框的拖动功能,使用户可以移动浮动框的位置。
  5. 题目解析 (parseQuestions函数):

    • 功能:从页面中解析出所有的题目数据,包括题目名称、选项内容、个人答案和正确答案。
    • 使用了 DOM 查询和操作来获取并解析每个题目的相关信息,并将解析后的数据存储在 allQsObjectallStr 中。
  6. 初始化 (init函数):

    • 功能:初始化整个脚本,包括插入样式、创建界面、设置按钮点击事件等。
    • 在初始化过程中,将页面中的题目数据提取并显示,同时设置了解析和下载按钮的点击事件。

注意事项

  • 匹配规则 (@match@require): 脚本通过 @match 指定了可以运行的页面地址,确保只在学习通平台相关页面上执行。
  • 数据处理: 脚本通过 DOM 操作和字符串处理来提取和展示题目数据,需要保证页面结构和元素的正确性和稳定性。
  • Excel导出: 使用了第三方库 xlsx.full.min.js 来处理Excel文件的生成,需要确保网络环境能够正常访问该库。

这段脚本的主要功能是帮助用户将学习通上的作业和考试题目以Excel的形式整理和导出,便于后续分析或分享。

javascript"> function displayQuestions(qObject) {let qULs = "";qObject.forEach(qNode => {let qLIs = "";qNode.nodeList.forEach(qItem => {let qSltString = qItem.slt.map(slt => `<li>${slt}</li>`).join('');let qLI = `<li style="padding-left: 5px; margin: 10px 0;"><div>${qItem.q}</div>${qSltString}<div style="color: blue;">${qItem.myAn}</div><div style="color: red; text-align: right">${qItem.an}</div></li>`;qLIs += qLI;});let qUL = `<ul style="padding: 0;">${qNode.nodeName}${qLIs}</ul>`;qULs += qUL;});document.getElementById("qList").innerHTML = qULs;}
javascript"> function parseQuestions() {allQsObject = [];allStr = "";const nodeBox = document.getElementsByClassName("mark_item");Array.from(nodeBox).forEach(qNode => {let node = { nodeName: "", nodeList: [] };const typeTitle = qNode.querySelector(".type_tit")?.innerText || "";allStr += `${typeTitle}\n`;node.nodeName = typeTitle;const questions = qNode.querySelectorAll(".questionLi");questions.forEach(question => {let qItem = { slt: [], q: "", myAn: "", an: "" };const qName = question.querySelector(".mark_name").innerText;allStr += `${qName}\n`;qItem.q = qName;const qSelectBox = question.querySelector(".mark_letter");if (qSelectBox) {const qSelectItems = qSelectBox.getElementsByTagName("li");Array.from(qSelectItems).forEach(qSelectItem => {const qSelectText = qSelectItem.innerText;if (qSelectText) {allStr += `${qSelectText}\n`;qItem.slt.push(qSelectText);}});}try {const qAnswer = question.querySelector(".mark_answer .colorGreen")?.innerText || "";const qMyAnswer = question.querySelector(".mark_answer .colorDeep")?.innerText || "";allStr += `${qMyAnswer}\n${qAnswer}\n`;qItem.myAn = qMyAnswer;qItem.an = qAnswer;} catch (err) {console.log(err);}node.nodeList.push(qItem);});allQsObject.push(node);});displayQuestions(allQsObject);}function init() {insertStyle();createMenuBox();setupDraggableBox();document.getElementById("qTitle").innerHTML = document.querySelector(".mark_title").innerText;document.getElementById("jxBtn").onclick = parseQuestions;document.getElementById("xzBtn").onclick = () => {const filename = document.querySelector(".mark_title").innerText + ".xlsx";const data = allQsObject.reduce((arr, qNode) => {qNode.nodeList.forEach(qItem => {arr.push({'题目': qItem.q,'选项': qItem.slt.join("\n"),'我的答案': qItem.myAn,'正确答案': qItem.an});});return arr;}, []);downloadExcel(data, filename);};}let allQsObject = [];let allStr = "";init();
})();

感兴趣的可以根据以上去完善一下基本能实现了


http://www.ppmy.cn/devtools/145692.html

相关文章

WEB安全漏洞之路径遍历、跳转等漏洞解析

1. 路径遍历漏洞&#xff08;Path Traversal Vulnerability&#xff09; 路径遍历漏洞&#xff08;又叫目录遍历漏洞&#xff09;是指攻击者通过操控文件路径&#xff0c;使得应用访问服务器上未授权的文件或目录。攻击者通常通过操控文件路径中的 ../ &#xff08;路径上移符…

WPF制作图片闪烁的自定义控件

1.定义自定义控件 BlinkingImage.cs: using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media.Animation; using System.Windows.Media.Imaging;namespace YourNamespace {public class BlinkingImage : Control{public static rea…

STM32HAL库中RTC闹钟设置时分秒,年月日

在STM32的HAL库中&#xff0c;RTC&#xff08;实时时钟&#xff09;模块提供了多种功能来管理时间和日期&#xff0c;包括设置闹钟。对于RTC闹钟功能&#xff0c;确实主要集中在时、分、秒的配置上&#xff0c;但年、月、日也可以通过RTC日期寄存器进行设置&#xff0c;并且可以…

Flutter persistentFooterButtons控件详解

文章目录 1. persistentFooterButtons 的用途2. persistentFooterButtons 的定义3. persistentFooterButtons 的基本用法示例 1&#xff1a;简单的底部按钮解释&#xff1a; 4. persistentFooterButtons 的常见用法示例 2&#xff1a;使用不同的按钮类型解释&#xff1a;示例 3…

中关村科金海外外呼机器人如何通过大数据分析帮助跨境电商实现精准营销?

精准营销是企业提升市场竞争力、优化客户体验和实现可持续增长的关键策略。与传统的广撒网式营销不同&#xff0c;精准营销通过数据分析、人工智能和机器学习等先进技术&#xff0c;深入了解客户的偏好、行为和需求&#xff0c;从而提供高度个性化的产品和服务推荐。中关村科金…

快速理解24种设计模式

简单工厂模式 建立产品接口类&#xff0c;规定好要实现方法。 建立工厂类&#xff0c;根据传入的参数&#xff0c;实例化所需的类&#xff0c;实例化的类必须实现指定的产品类接口 创建型 单例模式Singleton 保证一个类只有一个实例&#xff0c;并提供一个访问他它的全局…

游戏引擎学习第52天

仓库 : https://gitee.com/mrxiao_com/2d_game 这节的内容相当多 回顾 在游戏中&#xff0c;实体被分为不同的类别&#xff1a;接近玩家的“高频实体”、距离较远并正在模拟的“低频实体”和不进行更新的“休眠实体”。这些实体会根据它们与玩家的距离进行处理&#xff0c;接…

机器学习-梯度下降+小批量梯度下降+数据归一化

文章目录 梯度下降小批量梯度下降多轮训练 数据归一化归一化原因损失函数等高线归一化 梯度下降 当前参数-损失函数关于参数的导数新参数&#xff0c;新参数会往损失函数减少的方向变化 小批量梯度下降 小批量梯度下降&#xff1a;每次选择部分数据计算损失率进行梯度下降 随…