内容提要
本文介绍了作者使用 Node.js 开发查询教务系统成绩的脚本。通过分析登录流程,作者利用 Express 和 request 库实现了自动登录和成绩查询功能,成功获取成绩并进行了数据清洗和 GPA 计算。作者强调了安全隐患,并鼓励读者探索源码。
延伸解读
登录流程中的关键细节
文章指出,教务系统登录时需在POST请求中携带SessionID,但作者发现必须使用验证码请求返回的SessionID,而非主页访问的SessionID。这一细节是登录成功的关键,也反映了Java后端系统常见的验证码绑定Session机制。读者在模拟登录类似系统时,应仔细分析每个请求的响应头,确认SessionID的来源。
数据安全与隐私考量
作者提到,用户数据使用aes-256-cbc加密存放在本地cookie中,但密码在传输时仍是明文,存在安全隐患。此外,项目虽承诺不在服务器端记录信息,但用户仍需输入学号和密码。这提醒读者,在使用第三方查询工具时,应关注其数据加密方式和隐私政策,权衡便利与安全。
技术实现与工具选择
作者使用Express和request库实现自动登录,并用cheerio清洗HTML表格数据,最终计算GPA。这些工具在Node.js生态中较为常见,适合处理HTTP请求和HTML解析。对于初学者,此项目展示了如何通过分析网络请求和响应来模拟登录,是学习Node.js和网络爬虫的实用案例。
项目局限与更新
文章更新提到,学校更改了外网访问方式,原有代码已不完全适用,但整体思路不变。这表明此类脚本可能因学校系统调整而失效,维护成本较高。读者在参考时需注意时效性,并建议直接查看源码以理解核心原理,而非照搬代码。
Q&A
如何使用 Node.js 查询教务系统的成绩?
可以通过开发一个使用 Express 和 request 库的脚本,模拟登录教务系统并查询成绩。
在脚本中如何处理用户的学号和密码?
用户的学号和密码通过输入后,使用 aes-256-cbc 加密存放在本地 cookie 中。
教务系统的登录流程是怎样的?
登录流程包括发送包含学号、密码和验证码的 POST 请求,并携带 SessionID 进行身份验证。
如何清洗获取的成绩数据?
使用 cheerio 库对成绩的 HTML 表单进行清洗,删除冗余信息以便后续处理。
脚本中如何计算 GPA?
在清洗后的成绩表中遍历和筛选每一列,排除任选课成绩后进行 GPA 计算。
使用该脚本时有哪些安全隐患?
脚本在数据传递时使用明文传输密码,存在安全隐患,建议用户谨慎使用。