学校适配指南:如何提交边缘情形?
Cea 使用边缘情形 API 来加载学校配置,这样能极大缩短适配周期。该 API 的数据源就在本项目 ./vercel/data/school-edge-cases.json 文件中,我们要适配自己学校,就是不断补充这个文件,下面我来介绍一下具体做法
比对 formIdx
由于网页元素可能被客户端脚本隐藏,我们需要查看网页源码,才能获得抓包时(无法运行客户端脚本)正确表单的位置
浏览器进入学校统一登陆页,点击右键 => 查看网页源代码,CRTL + F 查找字符: <form
找到用密码登录方式的那个表单,计算它在网页中的序号(0 为起始索引)
比如我搜索到了四个结果,用户名密码登录表单在第二个,那么就能得到 formIdx 的值为 1,将此值与 NOTCLOUD 对象中的同字段值比对,有差异则需要在边缘情形文件中增加对于学校的边缘情形:
{
+ "武汉大学": {
+ "formIdx": 1,
+ },
"NOTCLOUD": {
"getCaptchaPath": "/getCaptcha.htl",
"checkCaptchaPath": "/checkNeedCaptcha.htl",
"formIdx": 2,
"pwdEncrypt": true
}
}
比对检查验证码接口路径 checkCaptchaPath
在输入用户名,点击密码时,统一登陆网页会请求一个接口检查是否需要验证码。很不幸,这个接口的路径各异,也需要特殊处理。
我们在浏览器内打开调试工具,切换到 Network 标签下。刷新网页,填入用户名,点击密码输入框,在点击的瞬间会出现新的请求,后缀类似 /checkNeedCaptcha.htl,这个值便是我们的 checkCaptchaPath 字段的值;同上,比对后有差异就需要填入边缘情形:
{
+ "武汉大学": {
+ "formIdx": 1,
+ "checkCaptchaPath": "/needCaptcha.html"
+ },
"NOTCLOUD": {
"getCaptchaPath": "/getCaptcha.htl",
"checkCaptchaPath": "/checkNeedCaptcha.htl",
"formIdx": 2,
"pwdEncrypt": true
}
}
比对获取验证码路径 getCaptchaPath
同上一步检查验证码接口路径一样,我们还是用 Network 标签页监听请求,3 次输入错误的账号密码,再次输入密码时就能看到获取验证码的接口路径,类似于 /sliderCaptcha.do,同样,比对后有差异则填进边缘情形数据源里:
{
+ "武汉大学": {
+ "formIdx": 1,
+ "checkCaptchaPath": "/needCaptcha.html"
+ "getCaptchaPath": "/sliderCaptcha.do"
+ },
"NOTCLOUD": {
"getCaptchaPath": "/getCaptcha.htl",
"checkCaptchaPath": "/checkNeedCaptcha.htl",
"formIdx": 2,
"pwdEncrypt": true
}
}
比对提交表单中的验证码提交名称 submitCaptchakey
输入验证码和测试账号,登录,在最终的登录请求体中能找到
比如我输入 fake 作为验证码,此请求类似于下图:

通过红色矩形区域的字段可以看出,这个 key 就是 captcha,同上比对(添加)
提交 PR
你可以使用 localEdgeCasesFile 配置字段来本地测试,如果成功,请你回馈社区,提交 PR 使更多同学收益
具体过程就是修改 ./vercel/data/school-edge-cases.json 文件,然后我们就可以 Commit 并提交 PR 了,当 PR 被 Merge 之后,Vercel 将自动部署新的 API,届时重新用 Cea 在线加载学校的用户也可以适配 🎉
"福建农林大学": { "formIdx": 0, "checkCaptchaPath": "/needCaptcha.html", "getCaptchaPath": "/captcha.html" },
@linrusheng123 👍,方便直接提交 PR 吗
@linrusheng123 👍,方便直接提交 PR 吗
好的 我尝试一下