背景
新学期伊始,年度抢课大戏同步上映,学校的正方教务系统也迎来了前所未有的流量冲击。教务系统这个跑在 Windows 2003 的上古时期的 ASP.NET 程序的服务器自然也承受不住,在选课高峰期频频崩溃,从而也导致了用户登录的账户在选课期间频频掉线的问题。
也不得不吐槽一下这上古时期的网页的交互逻辑:教务系统在每一次掉线以后都需要重新登录。这个过程最致命的是,当登录时输入错误的情况下,用户名、密码、验证码都需要重新填写。尝试多几次,大概也会有想砸电脑的冲动,可以说是十分反人类了。。。
用户名和密码可以通过浏览器自动填充,解决了一个大问题,但验证码仍然需要手动输入,重复去输入那辣眼睛的验证码的过程,还是让人有些心塞,且很容易出错。想想这几秒钟也十分关键,关系到那些喜欢且热门的课程能否到手,所以我也产生了做一个验证码自动填充的程序的想法。
受到 eleflea/neu_filler: 自动填充东北大学教务处验证码脚本 的启发,经过半个月的研究,这个想法也变成了现实。
你可以选择以下任意一种方式使用本脚本:
- 油猴脚本:SCNU JWC Captcha filler
- 书签栏 javascript: 协议链接脚本:一键登录教务系统脚本生成器 2.0
思路
在东北大学的同学的代码启发下,了解到通过 HTML5 的 Canvas API 的 getImageData 方法可以实现对网页图片像素的读取。这里的思路大致与东北大学教务验证码填充脚本一样,不同的是这里在切割、处理单个字符的过程花了较大的功夫,具体来说可以分为以下5个步骤:
- 获取图片信息
- 将图片二值化
- 把图片中不同的字符分割出来
- 将分割的字符通过旋转的方式标准化
- 验证码的训练与识别
阅读全文 »