破解滑动验证的思路

破解滑动验证的思路

之前为了完成任务,学会了selenium+Firefox模拟登陆天眼查,然后获取信息。结果在实际操作中发现,当查询的动作过于频繁,即使完全模拟正常人的点击行为,设置了每查询一个公司,强制休息5秒,也会被强制退出,要求重新登陆。

重新登陆的话,偶尔会跳出验证码。既然有验证码,肯定也会有破解验证码的方法,于是开始上网搜资料。看了几天的资料,主要是关于滑动验证码,大概知道了目前网上破解滑动验证码的方法。

第一种就是截图。一张是完整的验证码图片,一张是有缺口的验证码图片。两张图片有两个地方有明显的不同,一个是滑块,一个是缺口。不过缺口是在滑块的右边,所以要寻找缺口的位置,从图片的右边开始寻找,对比一次就好。

我在如何得到这两张截图的地方,卡了很久。因为按照目前网上的代码,基本上截取不到正确的图片。整体思路就是:定位元素,返回元素的位置(x、y坐标)和大小(高度、宽度),然后用crop裁剪截图。

但是我多次尝试截图,发现截取的都是空白。我用的是Firefox浏览器,不知道和这个有关系吗。

后来经过多次实验,终于知道原因了。在网页中,图片的位置和大小,与截图后图片中的位置和大小不一致,同比例缩小了。

以百度的页面为例,“百度一下”这个图片,在网页中的大小是 100x36

而在截图中,“百度一下”的大小是200x72,同比例放大了2倍

所以在原代码中,left, top, right, bottom都乘以2,得到了正确的图片。

解决了这个问题,得到了正确的图片,后面的问题也就迎刃而解了。因为对比两张图片的不同,找出缺口的位置;根据缺口的位置,生成滑动的轨迹,网上都有现成的代码。

参考:

第二种就是拼图。验证码是由很多小图片拼接而成,分了两行。把这些小图片按照顺序拼接成一个完整的图片。

以b站的登陆界面为例,滑动验证码如下图

拼接完成后,一张是完整的,一张是缺口的。然后和第一种方法一样,对比两种图片,找到缺口位置,生成滑动轨迹。

参考:

大概的思路就是这样,代码网上有很多,有心的自己找找就有。贴的两个链接,里面的代码都是可以直接用,我自己试过。当然提供验证码服务的公司,也会不断升级,也许过一段时间,原来的代码就失效了。所以解决问题的思路也要跟着改变,有了思路,再来用代码实现具体的方法。