3,12306官网登录详解
一,首先我们要先通过浏览器抓包的方式搞清楚登录的流程,url,参数等
用错误的账号密码测试就可以了(因为主要是获取登录的信息而不是要结果,所以先用错误的账号密码测试就可以了,这样可以节省时间,同时账号不会出现异常)
image.png image.png当我点击登录之后我们抓到了两条请求数据,通过查看,发现第二条是获取验证码图片的get请求,而通过第一条的返回值我们发现这是做验证码验证的一个请求,也就是说这里的登录和普通的网站登录不一样,普通的网站登录是账号密码及验证码一起提交,而12306是先做了一个验证码的验证,需要等到验证码验证通过才会进行账号密码的提交,我们可以通过测试来证明我们的猜想(输入正确的验证码试试)
image.png通过测试可以证明我们的猜想是正确的
那么首先我们得解决验证码的问题,首先需要验证码的类型
验证码的形式:
1,字符验证码(输入图片中的字符完成验证)
2,问答验证码(输入验证码的正确答案完成验证码)
image.png3,坐标验证码(输入正确的验证码坐标完成验证)
image.png image.png很明显,12306采用的是坐标验证码,而且是多组坐标,因为有6个可选项
那么我们来分析下坐标的值,因为这里面有很多的因素是需要确定的,比如说取值的基坐标,坐标是否进行二次计算等等
好,分析从哪里开始呢?(提问,看看同学们有没有有自己的想法的)
先自己动手在浏览器操作并抓包,查看请求的参数中验证码的坐标值于我们选择的坐标的差异与关系,注意用一个比较容易计算的坐标值
请求的验证码参数如下
坐标值为40,46,那么也就是说我们点击的那个点的坐标就是40,46,所以我们先用截图工具画出一个长为40,宽为46像素大小的矩形,然后对照我们点击的大概位置来看看能否看出什么问题
差不多就得到了下图矩形的位置,那么刚好贴近验证码整个图片的左侧和上面的横线处
image.png
那么我们先暂时确定下基坐标位置为分割线的最左侧吧
那么我们怎么来验证我们的猜想呢?(提问)
那就是用Python下载验证码,然后通过这个验证请求手动输入验证码的坐标进行测试,结果如下
image.png
验证码通过,那么接下来我们尝试下用手动输入验证码的方式来进行登录看是否可行 image.png
登录成功,是不是很激动呢?