您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
修复版:在广州商学院教务系统成绩查询页面,增加一个“导出所有成绩”的按钮,方便导出所有学期的成绩。
一份专为广州商学院(GCC)学生设计的浏览器用户脚本,旨在突破官方教务系统的限制,实现全量成绩单的一键导出。
要理解本脚本的原理,我们首先要明白现代网页应用(WebApp)通常分为前端(UI)和后端(API)两个层面。前端是我们在浏览器上看到的界面,而后端是处理数据和逻辑的服务器。本脚本的本质,就是绕过前端界面的操作限制,直接与后端 API 进行一次精心构造的交互。
官方教务系统的“成绩查询”页面存在一个核心痛点:其前端界面强制用户必须选择一个“学年”和“学期”才能进行查询或导出,这意味着用户无法通过正常操作来获取一份包含所有学期的完整成绩单。
通过浏览器的开发者工具(F12)对网络流量进行分析,我们可以观察到,当用户点击“导出”按钮时,浏览器会向服务器发送一个请求。这个请求并非刷新页面,而是一个后台的 API 调用。
分析发现,负责导出的后端 API 端点是:
POST /cjcx/cjcx_dcXsKccjList.html
这个接口接收一系列参数,并直接返回一个 Excel 文件的数据流,而不是网页内容。这便是我们进行操作的完美目标。
一个正常的、导单个学期的请求,其发送的数据(Payload)大致如下:
gnmkdmKey=N305005
&xnm=2024
&xqm=12
&dcclbh=JW_N305005_GLY
&exportModel.selectCol=...
&csrftoken=xxxx-xxxx-xxxx-xxxx
这里的关键参数是:
xnm
: 学年 (e.g., 2024
)xqm
: 学期 (e.g., 12
代表第二学期)csrftoken
: 一个用于防止跨站请求伪造(CSRF)攻击的安全令牌。我们面临的核心挑战是:如何让后端一次性返回所有数据?
答案在于一个常见的后端设计逻辑:对于筛选参数,如果前端不传递值或传递空值,后端常常会将其解释为“无筛选条件”,即“查询全部”。
本脚本正是利用了这一点。当我们点击“导出所有成绩”按钮时,脚本并不会去读取页面上用户选择的学年和学期,而是主动构造一个将 xnm
和 xqm
参数值置为空字符串的请求。
// 脚本构造的核心数据片段
let data = `gnmkdmKey=N305005&xnm=&xqm=&...`;
仅仅修改参数还不够。现代 Web 应用为了安全,会验证请求是否源自合法会话。csrftoken
就是这道防线。服务器在渲染页面时,会将一个唯一的 csrftoken
埋藏在页面的 HTML 中一个隐藏的 <input>
标签里。
<input type="hidden" id="csrftoken" name="csrftoken" value="一长串唯一的令牌值">
脚本在执行时,会先像用户一样“查看”页面,用 jQuery
找到这个隐藏的输入框并读取其 value
值。
const csrftoken = $('#csrftoken').val();
然后,它将这个获取到的令牌附加到我们伪造的请求数据中,使其看起来像一个完全合法的、由用户亲自发起的请求,从而通过了服务器的安全验证。
服务器验证通过后,会返回 Excel 文件本身的数据流。脚本通过设置 XMLHttpRequest
的 responseType
为 blob
来正确接收这种二进制数据。
xhr.responseType = 'blob';
收到 blob
对象后,脚本在浏览器内存中为其创建一个临时的、唯一的 URL,然后模拟用户点击一个隐藏的下载链接,最终优雅地触发了浏览器的标准下载流程。
总结:本脚本通过直接与后端API对话,并利用“空值即全部”的逻辑漏洞,同时模拟合法用户的安全凭证,实现了对前端UI限制的完美绕过。整个过程安全、高效,且不触及任何敏感操作。
基于以上原理,本脚本实现了以下核心特性:
.xlsx
格式,便于在各类办公软件中打开和处理。(建议在此处嵌入一段 GIF 动图,完整展示从登录(不可用)、进入成绩页面、点击按钮到文件成功下载的全过程)
为你的浏览器安装一款用户脚本管理器扩展,它是运行本脚本的基础。
点击链接后,脚本管理器将自动打开并提示你进行安装,确认即可。
我们欢迎任何形式的贡献,无论是代码还是建议。
csrftoken
到导出请求中,解决因缺少令牌导致的请求失败问题。本项目基于 MIT License 授权。
© 2025 在虎
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址