本文主要写一下激活成功教程京东登录时候滑块的分析步骤,具体代码未做展示.
本来以为京东的滑块验证码如果用selenium 直接滑动的话,会很容易.但是,万万没有想到,无论怎么滑,都没法成功.后来,决定直接请求接口试试吧,没想到成功了.所以,拿来分享一下了.
首先,输入用户名和密码后,点击登录京东是一定会出现验证码的.
看着跟其他网站的验证码是一样的.
分析过程分为了以下几步:
第一步:获取背景图
观察接口,找到这样一个接口
返回值是这样的:
返回值有两个值bg和patch,猜想应该是base64编码后的值,解析试一下:
查看保存的图片,bg是带缺口的背景图,patch是滑块.
那我们直接构造请求就可以了,请求参数:

其中有一个e参数,在页面找不到.不过经过多次测试,可以把它写死,可以顺利得到图片.
第二步:计算缺口位置
接下来,我们就需要找出缺口位置了,京东是没有完整的图片的,不能按照一般的寻找缺口位置的方法,可以使用python的cv2模块做图像处理,得出缺口位置.
第三步:发送滑块滑动验证
滑动滑块后,可以发现会发出下面一个请求:

后面的返回值可以看出是滑动是否成功的信息,观察一下请求参数
这些参数大部分都可以找到,e可以是上一步写死的参数,s的值如过全局搜索一下,会发现是接口
的返回值里的sessionId,c是上一步得到图片的返回值challenge,其他的在网页上也都能得到,只有d这个参数,怎么都找不到,猜想猜想是不是跟滑动的位置信息有关,因为我们得到的缺口的位置还没有找到.
设置一个鼠标mouseleave时间,调试跟踪一下(需要有耐心),找到了生成d的js位置:

当再次滑动滑块的时候,松开,js会暂停到这里,此时,在控制台输入g,可以看到g是一个数组,这个数组的元素有三个值,猜测应该是坐标和时间戳:
经过多次调试发现规律,
- 数组的第一组基本不变.
- 数组的最后一个元素的第一个数减去第一个元素的第一个元素,正是第二步得到的缺口位置.且每两个元素之间的差值不大
- 数组的每一个元素的第二个数基本不变或只有很小距离的变化
- 数组的大小不固定
我们按照js的方法对构造的数组加密,可以得到d. python执行js函数的模块可以使用pyexecjs.我们把加密js函数复制过来,执行一下就行.
接下来发送验证请求就行,结果如下:

以上就是滑块验证部分.限于篇幅,下一篇再分析一下如何登录京东.
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7186.html