Skip to content

如何编写自定义脚本适用于自己学校

Zidea edited this page Jul 23, 2024 · 1 revision

Welcome to the ChaoXingReserveSeat wiki!

如何编写自定义脚本适用于自己学校

由于学习通面向不同学校的图书馆预约做了不同的处理方式(也可能是学校作妖),导致不同学校,不同图书馆存在较大的差异,相同的脚本在不同的情况下无法全覆盖实现预约,因此总是对不同的院校做对应的修改确实有点折腾不来,因此设置了该wiki用于用户自定义开发自己学校的脚本。请将代码切换到ext分支。

当直接使用脚本进行不同情况下的预约时,请根据如下几点找对应的解决方案

当前使用人数过多,请稍等5分钟后再试(修改难度较高,需要对utils/reserve.py或者utils/encrypy.py进行修改,要不就是你没有合适的验证方式)

这通常由两种情况导致。1、由于学习通预约的页面有所更新导致现有的部分referer过老。2、enc字段加密出现问题。这种情况下请直接提起issue。

当然如果想要自己解决也并不复杂,主要步骤如下:

1、在reserve.py中的login_url进行登陆

2、通过进入预约的页面进行电脑上的预约(预约链接参考readme.md中的roomid获取方式)

3、抓包预约提交的请求中referer和现在的差距并修改

4、如果仍然存在问题,可能是enc字段加密的问题,需要找到对应的加密js脚本(reserve.js而且一般混淆过)并提取其中关键的加密步骤,重新写到encrypt.py中即可。

预约失败1:学校有验证方式但是现在实现的验证方式只有滑块验证(修改难度一般,需要会一点爬虫技术和其它库的调用)

这个一般来说得调用一点其他工具进行过验证,常见的就是手搓opencv或者ddddocr或者在线过码网站,主要步骤如下:

1、仿照slider_reserve.py中的内容,重写self.submit方法即可

预约失败2:获取不到token以及无法进行提交(修改很简单,通常只需要修改customed_reserve.py即可)

这个是最容易修改的了,主要步骤如下:

1、仿照readme.md中的方式获取对应的roomid(要注意的是,不同学校的关键字段不同,除了roomid可能还需要seatId,pageToken等,有些甚至会自动更新,目前不知道有什么手段能够统一获取,但是建议自己尝试修改)

2、获取对应的url前缀(和上一步一起,通常有https://office.chaoxing.com/front/apps/seatengine/live/select;https://reserve.chaoxing.com/front/third/apps/seat/select等等)

3、获取到对应字段之后还需要电脑提交一次以获取其提交的url前缀(通常为:https://office.chaoxing.com/front/apps/seatengine/select;https://reserve.chaoxing.com/data/apps/seat/submit)

4、仿照customed_reserve.py中的self.url和self.submit_url进行修改即可。根据不同的情况可能还需要稍微修改一下submit中提交的url的format。

如果实在还是有问题请提交issue