不用把题目一题一题复制粘贴,也不用截图拼版:在试卷页点一下浮球,题目、图片、公式、答案与解析一起进文档,排版按正式试卷来。
依赖:iPad 需要先在 Safari 里装好 Userscripts 扩展;安卓需要用支持用户脚本的浏览器(并已装脚本管理器)。脚本本身不用注册、不用登录第三方账号。
说明:脚本免费,不收集任何使用数据,也没有统计埋点。它只在一次操作里联网——你在面板里点「导出」时,才把这份试卷的内容发给云端通道用于生成文件;其余时间不发出任何请求。
同一份 .user.js 两端通用,区别只在「用哪个浏览器 + 靠什么来跑脚本」。
下面每一项都是脚本里已经做完的动作,写的是「它做什么、结果长什么样」。
按题型分组把整份卷子的题目全部认出来(单选题、多选题、填空题、解答题各成一组),遇到成批漏认会继续往回补。结果:面板上直接告诉你「认了几道」。
题目里的配图不是留一个网址,而是被取回后嵌进文档。结果:离线打开导出的文件,图还在原位置。
公式转换后写进 Word 的是原生公式对象(OMML),双击就能改;PDF 里的公式是渲染出来的图形,任何工具都改不了——这是 PDF 格式本身的限制,不是脚本偷懒。
答案与解析本身能被识别出来,导出方式有三种:只导原卷(不带答案)、答案与解析附在卷尾、答案与解析跟在每题后面。
点导出后先走云端通道生成文件;超时、返回非 2xx、或返回的内容不是合法文件时,自动改用脚本本地生成,状态栏会写清这一次走的是哪条通道。
A4 纸面、标题居中、题型分组之间加细线、题号连续、图片居中、卷尾「参考答案与解析」另起一页、页脚带页码。结果:打印出来就是一份能直接发的卷子。
面板入口是一个圆形浮球,默认停在右下角;拖动它就拖动整块面板,面板按浮球所在的位置自动选择向左或向上展开,不会顶出屏幕外。
需要补全的题目按 10 题一批处理,批与批之间留间隔、结果本地缓存,避免短时间内把站点请求打满。
导出前能看见这一份认出几道题、哪几道没认出来、哪几处公式是图片。结果:不用等到打开文档才发现少题。
碰到验证码、登录失效、阻断页这类情况,脚本停下并明确写出原因,不做任何绕过尝试。结果:你知道是站点拦了,而不是以为脚本坏了。
两条通道的差别与各自限制,见下方常见问题「云端通道和本地降级有什么不一样」。
两条路径分开写,按「一步一个动作」的粒度,另开一页逐步说明,含常见卡点。
这里写的是脚本真实的边界,包括做不到的部分。
Word 的 .docx 里有「公式对象」这个概念,脚本会把题目里的公式转成 Word 原生的公式(OMML),所以双击就能改字、改上下标。PDF 格式里只有画好的图形和文字,没有公式语义,脚本写进去的就是一张渲染好的图——任何工具打开都改不了,只能重新导出。
会在原位留下一个可见的占位框(写明「图片未能内嵌」),而不是静默地把图丢掉。诊断视图里也会提示哪几处公式是以图片形式存在的。这样你打开文档就能立刻发现,而不是打印出来才发现少图。
因为答案不在你能看到的那一页里。组卷网的个人电脑版试卷页,匿名访问时答案区就是一个空容器——不是被折叠起来等你点开,而是本来就没下发;真正的答案与解析在移动版页面随页面数据一起下发。所以脚本取答案时要走移动站这条路,会受浏览器跨域能力、站点风控和登录状态的影响:跨域被拦、被要求验证码、登录失效,都会导致答案拿不到,此时脚本会停下并写出原因。
云端通道是把这份试卷的内容发到一个在线服务上生成文件,两端的机器都不用干活,但需要联网、也受那个服务的可用性限制。本地降级是脚本自己在浏览器里把文件拼出来,完全离线也能成,但设备算力有限、排版的精细程度不如云端。脚本的默认顺序是先云端、失败自动降级本地,并在状态栏写明这一次实际走的是哪条。
云端通道跑在免费额度上,服务器本身没有浏览器环境,只能按网址去取图。有些图片地址在服务器侧取不到(需要登录态、有防盗链、或是被站点拦下),这类图就会走本地通道去补,或者在文档里留下占位框。这不是脚本坏了,是免费通道的能力边界。
没有。脚本不写死任何令牌、密钥、cookie,也不需要你填任何激活码;它用的是你浏览器里本来就有的登录态。你在试卷页看到什么权限,它就有什么权限。
脚本不统计、不上报使用行为,没有埋点,也不会读取你的其它浏览记录。唯一的联网动作是:你点「导出」时,把这份试卷的内容(题干、选项、答案、解析)发给云端通道换回文件;如果你用的是本地通道,连这一次请求都不会发出去。除此之外它不做任何后台请求。
不会。安装就是把 .user.js 的内容替换掉,Userscripts / 脚本管理器里其它脚本不受影响。脚本本身也没有需要你迁移的配置项——面板上的选项都在脚本内部设好了默认值,只有答案补全的结果会做本地缓存。
目前支持组卷网(含移动站)与菁优网。脚本只在这些站点上运行;打开陌生域名的网页时,面板会显示「未知站点(域名)」,不会去猜结构、也不会尝试导出,避免给你一份错的东西。
先打开诊断视图看两个数字:「容器命中数」和「实际识别题数」。这两个数对不上就是识别出了问题,请把页面地址和这两个数字一起反馈。1.7.1 修的正是这个问题:页面上有 26 个题目容器,旧版本却只认了 3 题。
这是目前已知的一处误报:组卷网整卷题号是全卷连续编号的,而诊断里的连续性判断是按「每个大题组从 1 重新开始」来算的,所以从第二个大题组起就会被判成漏题。它只影响提示文字,不影响识别出的题目数量,也不影响导出的内容。修它属于下一轮的事,这里如实写出来。
是脚本刻意保留的未实现项(对应另一个产品的服务端能力)。这些功能没有获得授权,所以界面直接标成不可用,也没有做成点了没反应的假按钮。你没有授权的东西,脚本不会假装有。
脚本会停下,并在面板上写明是哪一类:需要验证码、登录已失效、还是被站点拦页。它不会去破解验证码、不会伪造身份、也不会反复重试硬闯。你处理完这些(手动过验证码、重新登录)再点一次就行。
按版本倒序,只写确认过的改动。早期版本没有逐条留档日期,所以这里不标注发布日期,也不补写记不清的条目。
div.sec-list 包装,旧逻辑只取每个大题组里的第一个,于是每个大题组只剩下第 1 题。更早的版本(1.4.0 及之前)记录不完整,这里不追溯补写。
就是一个文件:个人试卷导出助手.user.js。
@version 里,文件名不带版本号本页是静态站点,所有页面都能离线打开;页面本身不含任何统计代码、外部字体或外部脚本。