爬虫之极验验证码破解-滑动拼图验证码破解

滑动拼图验证码破解

      • 前言
      • 步骤分析
        • 第一步,获取原图
        • 第二步 拼接图片
        • 第三步 计算豁口所在位置
        • 第四步 计算拖动距离
        • 模拟拖动
        • 其他

前言

滑动验证码已经流行很多年了,我们在这里尝试一下如何实现滑动拼图验证码的自动化拖动。
这是某网站的注册页面,点击拖动按钮后会出现豁口滑动。
爬虫之极验验证码破解-滑动拼图验证码破解_第1张图片

步骤分析

大致流程就是使用webdriver此页面后,获取到原图以及有豁口的图,拿这两个图进行对比,找到豁口部分的左侧坐标,根据这个坐标进行滑动验证即可。

第一步,获取原图

鼠标放到图片上,右键检查元素即可发现该图片是以精灵图的形式展现出来的,而且原图是由多个小图片打乱顺序后拼接而成,审查元素可以看到小图片在混乱大图中的坐标点,我们要做的就是根据此坐标点和图片大小对图片进行拼接,使其呈现出与web页面中图片一样的图片。
爬虫之极验验证码破解-滑动拼图验证码破解_第2张图片
爬虫之极验验证码破解-滑动拼图验证码破解_第3张图片
该页面返回了两张图片,一个是完整图一个是豁口图,我们要根据这两个标签,去匹配出对应的小图座标点以及大图的url
爬虫之极验验证码破解-滑动拼图验证码破解_第4张图片
代码如下:
爬虫之极验验证码破解-滑动拼图验证码破解_第5张图片
得到如下格式的数据
在这里插入图片描述

第二步 拼接图片

坑点:该图片在网页中显示是312X116的,但是拼接之后有很多乱乱的线条,后来发现在web中,其大小为260X116。
思路:向该图片url发送请求获取混乱大图,使用pillow模块,创建一张空的图片,遍历上一步得到的坐标点,然后根据此坐标点和图片大小(10X58)从响应大图中copy出这个位置的图片,再将此图片粘贴到空图中,遍历过程中注意粘贴时所指定的坐标点,(该图片共分为52张小图片),前26张纵坐标为0,后20张纵坐标为58,横坐标要根据当前在此行中是第几个进行计算。
代码如下:
爬虫之极验验证码破解-滑动拼图验证码破解_第6张图片
运行效果:
爬虫之极验验证码破解-滑动拼图验证码破解_第7张图片
到此,已经可以获得正常顺序的图片了。

第三步 计算豁口所在位置

爬虫之极验验证码破解-滑动拼图验证码破解_第8张图片
对比两张图片,豁口部分明显暗于正常的图片,我们可以通过像素值进行判断。
三个像素点的对应的值之差都大于50即认定是该点为豁口左上角。
爬虫之极验验证码破解-滑动拼图验证码破解_第9张图片

第四步 计算拖动距离

设豁口左上角x轴坐标为X,
为了能让滑块与豁口重合,大概要移动X-10的距离。
爬虫之极验验证码破解-滑动拼图验证码破解_第10张图片

模拟拖动

使用selenium模拟拖动即可

其他

其实还有很多没解决的问题,譬如验证码后端会对你的拖动轨迹进行判断,很有规律的拖动很容易被检测到为机器,从而导致拖动失败。
其次还有webdriver特征值检测。
本人使用pyppeteer进行模拟拖动,可以通过异步执行js修改webdriver特征值,但是还没有解决拖动这个问题,Pyppeteer提供的拖动方法貌似有bug,短距离拖动无法进行。

你可能感兴趣的:(爬虫)