1此教材仅供学习和参考,学科网及组卷网仍需要会员才能正常访问相关试卷与答案。教程前置准备:安装油猴(Tampermonkey)插件安装油猴脚本前,需先在浏览器中安装油猴插件(核心管理器)。不同浏览器的安装方式略有差异,以下是主流浏览器的详细步骤:
Chrome 浏览器(含 Chromium 内核衍生浏览器)方法一:应用商店直接安装(推荐,需网络可访问 Chrome 应用商店)
打开 Chrome 浏览器,在地址栏输入 chrome.google.com/webstore 进入 Chrome 应用商店;
在搜索框中输入“Tampermonkey”,点击搜索结果中的官方插件(图标为黑色背景上的黄色猴子);
点击“添加至 Chrome”,在弹出的确认窗口中选择“添加扩展程序”;
安装完成后,浏览器右上角会出现油猴图标,表明插件安装成功。
方法二:本地文件安装(适用于无法访问应用商店的情况)
下载油猴插件的 .crx 格式安装包(需从可信来源获取,如油猴官网、Greasy Fork 配套资源页);
打开 Chrome 浏览器,在地址栏输入 chrome://extensions 进入扩展管理页面;
开启页面右上角的“开发者模式”开关;
将下载好的 .crx 文件直接拖拽到扩展管理页面中;
在弹出的提示框中点击“添加扩展程序”,完成安装后查看右上角油猴图标是否正常显示。
提示:360 安全浏览器、QQ 浏览器等 Chromium 内核国产浏览器,可参考此方法安装,步骤基本一致(扩展管理页面入口可能为:右上角扩展图标 → 管理 → 更多扩展)。
Edge 浏览器打开 Edge 浏览器,点击右上角三个点(设置及更多),选择“扩展”;
在扩展页面中点击“获取 Microsoft Edge 扩展”,进入 Edge 应用商店;
搜索“Tampermonkey”,找到官方插件后点击“获取”,等待安装完成;
安装成功后,可在浏览器右上角扩展栏中找到油猴图标(若未显示,可点击扩展图标展开列表,勾选“固定”将其显示在工具栏)。
在地址栏输入 edge://extensions/。在页面左下角找到并打开“开发人员模式”开关,允许加载已解压的扩展程序。
Firefox 浏览器打开 Firefox 浏览器,在地址栏输入 addons.mozilla.org 进入 Firefox 附加组件商店;
搜索“Tampermonkey”,点击搜索结果中的官方插件;
点击“添加到 Firefox”,在弹出的确认窗口中选择“添加”;
安装完成后,浏览器右上角会出现油猴图标,表明插件已生效。
提示:Firefox 不支持直接拖拽 .crx 文件安装,需下载专用的 .xpi 格式安装包或通过官方商店安装。
Safari 浏览器(Mac 系统)打开 Mac 上的 App Store,搜索“Tampermonkey”;
下载并安装官方版本的 Tampermonkey 应用;
安装完成后,打开 Safari 浏览器,点击顶部菜单栏“Safari”→“设置”→“扩展”;
在扩展列表中找到“Tampermonkey”,勾选“启用”,并可将其拖拽到浏览器工具栏方便使用。
核心步骤:安装油猴脚本在浏览器中打开 https://greasyfork.org/,搜索组卷网学科网试卷处理下载打印,请注意辨别作者为nuym。
若您搜索不到,你也可以选择直接点击该链接 组卷网学科网试卷处理下载打印
点击 安装此脚本->安装
下载如果你安装正确,你会看到这样的图片。
对的,我叛变了,沙比亳州一中招生办和教务办,至今忘不了对我的志愿表的冷笑和招生的傲娇,两个字,沙比。
找到你心意的卷子,点击打印试卷按钮,选择打印方式即可。
如果需要保存则使用另存为PDF
如果是自己组的卷子,则需要点击分享试卷,然后在新的窗口打开链接,继续上面的操作即可。
教程到此结束。
开发过程随便打开一个网页,使用开发者工具,鼠标选中查看对应组件。
这里我们定位到组件exam-cnt。
分析结构体
1 2
45
78
9
1011
基于上述定位的exam-cnt核心容器,我们继续对试卷标签下的大题标题和单道题目的DOM结构进行精细化拆解:
1. 大题标题模块(h4.sec-title)这是试卷中「填空题/选择题/解答题」等大题类型的核心容器,完整结构和字段含义如下:
1
2 3 一、填空题4 5 添加题型下试题6
id="1":该大题在试卷中的序号标识(如第1大题);class="sec-title clearfix":样式类,clearfix用于清除浮动,保证标题布局稳定;span标签:承载大题的显示名称(核心文本内容);a.add-sec-ques:操作按钮,qtid="2702"是该题型的唯一标识(后端关联该题型的业务ID)。2. 题目列表容器(div.sec-list)sec-list是单道题目(tk-quest-item)的父容器,所有该大题下的题目都嵌套在这个容器内。3. 单道题目核心模块(div.tk-quest-item)这是每一道具体试题的最外层容器,包含题目基础信息、题干、知识点、操作按钮等所有核心内容,我们按子模块逐一拆解:
3.1 题目外层标识(核心属性)1
3.2.1 题目来源(div.top-msg)1
1
3.3 题干核心模块(div.wrapper.quesdiv)承载题目正文、知识点、答案等核心内容:1
,...,则实数
的值为7 8
12 【知识点】13 14 根据集合的包含关系求参数15 解读16 17
181
1
17 18
25编写代码初始化容器创建两个核心容器,分别存储最终打印内容和待收集的答案(用于「答案移至末尾」模式):
1const newPageBody = document.createElement('div'); // 存储最终打印的所有内容2newPageBody.id = 'zujuanjs-reformatted-content';3const answersSection = []; // 临时存储答案,用于末尾汇总遍历页面结构,按类型处理元素页面中题目和大题标题的 DOM 结构是按顺序排列的,通过querySelectorAll(‘.sec-title, .tk-quest-item.quesroot’)获取所有大题标题和题目容器,然后逐一遍历处理:
1const sections = document.querySelectorAll('.sec-title, .tk-quest-item.quesroot');2sections.forEach((section) => {3 // 处理1:如果是大题标题(如“一、填空题”)4 if (section.classList.contains('sec-title')) {5 const span = section.querySelector('span');6 if (span) {7 const titleDiv = document.createElement('div');8 titleDiv.className = 'zujuanjs-section-title';9 titleDiv.textContent = span.textContent.trim(); // 提取标题文本10 newPageBody.appendChild(titleDiv); // 添加到打印容器11 }12 }13 // 处理2:如果是题目容器(核心:提取题干和答案)14 else if (section.classList.contains('tk-quest-item') && section.classList.contains('quesroot')) {15 const newQuestionDiv = document.createElement('div'); // 单个题目的容器16 newQuestionDiv.className = 'zujuanjs-question';17
18 // 找到题干和答案的父容器19 const quesdiv = section.querySelector('.wrapper.quesdiv');20 if (quesdiv) {21 // ========== 子步骤1:处理题干 ==========22 if (includeQuestions) { // 仅当需要包含题干时执行23 const cntDiv = quesdiv.querySelector('.exam-item__cnt'); // 题干DOM24 if (cntDiv) {25 // 克隆题干元素(避免修改原页面DOM)26 newQuestionDiv.appendChild(cntDiv.cloneNode(true));27 }28 }29
30 // ========== 子步骤2:处理答案 ==========31 const optDiv = quesdiv.querySelector('.exam-item__opt'); // 答案DOM(包含知识点、答案)32 if (optDiv) {33 // 移除冗余的知识点模块(只保留答案)34 const knowledgeBox = optDiv.querySelector('.knowledge-box');35 if (knowledgeBox) knowledgeBox.remove();36
37 // 情况A:答案与题干一起打印38 if (includeAnswers) {39 newQuestionDiv.appendChild(optDiv.cloneNode(true));40 }41 // 情况B:答案移至末尾 → 先存入临时数组,不立即添加42 else if (answersAtEnd) {43 answersSection.push(optDiv.cloneNode(true));44 }45 }46 }47
48 // 将处理好的题目(含/不含答案)添加到打印容器49 newPageBody.appendChild(newQuestionDiv);50 }51});替换页面内容并触发打印1function performPrint(includeQuestions, includeAnswers, answersAtEnd) {2 const newPageBody = getReformattedContent(includeQuestions, includeAnswers, answersAtEnd);3 // 添加试卷标题(可选)4 const titleElement = document.querySelector('.exam-title .title-txt');5 if (titleElement) {6 const pageTitle = titleElement.textContent.trim();7 const titleDiv = document.createElement('div');8 titleDiv.id = 'page-title';9 titleDiv.textContent = pageTitle;10 newPageBody.insertBefore(titleDiv, newPageBody.firstChild);11 }12 // 清空原页面,替换为处理后的内容13 document.body.innerHTML = '';14 document.body.appendChild(newPageBody);15 // 触发浏览器打印16 window.print();17}完整代码阅读
https://github.com/bzyzh/xkw-zujuan-script
鸣谢nuym 主要开发及撰写文章
WorkingFishQ 辅助开发
ResonanceForge 辅助开发
ChatGPT 辅助撰写文章
学科网 组卷网 试卷提供
相关推荐
CAD如何把图纸转换成EPS格式
iPhone6s语言切换方法
揭秘杭州九堡:小姐背后的真实生活与挑战
为什么现在的 VR 设备这么火
世界杯汉字:方寸之间,演绎全球狂欢的东方魅力
中科院列出35项中国需攻坚的“卡脖子”技术清单(全部)!
皮肤病的常见病因是什么?
qq消息漫游什么意思