滑动验证码最简单案例:破解qq空间(豆瓣网)滑块验证码(python+selenium实现) | 您所在的位置:网站首页 › qq空间登录界面图片 › 滑动验证码最简单案例:破解qq空间(豆瓣网)滑块验证码(python+selenium实现) |
破解qq空间(豆瓣网)滑块验证码
环境搭建
1、安装chrome浏览器和chromedriver
chromedriver下载连接:淘宝镜像 注意 :chromedriver的版本要与你使用的chrome版本对应 下载完成后将chromedriver.exe文件放到python.exe同一目录下。 打开cmd,用命令直接安装 pip install selenium然后在pycharm中的file–>settings–>project interpreter 中点击**+**号引入selenium包。 如果成功打开百度,说明环境已经搭好! 滑块验证码破解思路 计算滑块需要滑动的距离1、方法一:对比缺口图片和原图的像素值 这个方法的关键在于如何获取到原图。一般情况下我们打开浏览器的开发者模式,可以直接定位到验证码图片的位置。根据图片的呈现方式,我大概分为两种情况:一种是使用img标签呈现,这种方式一般会把图片的路径(qq空间、豆瓣网等)或者经过加密后(京东)放入到标签中,而另一种是使用canvas呈现,这种方式就需要通过修改canvas中的display属性来呈现单独的图片,但是我们无法直接通过路径去获取图片,只能通过截图的方式。(例如:极验的滑块验证码) 2、方法二:使用opencv方法处理缺口图片 就是将缺口图片处理成黑白图片,然后再计算缺口的距离。具体请参考opencv破解滑块验证码 滑块按照怎样的轨迹滑动1、直接匀速滑动(适用没有使用机器学习验证的网站:qq空间、豆瓣网等) 2、模拟人的动作按照先匀加速,后匀减速滑动,最后多滑一段距离再退回来。(适用于使用机器学习验证的网站:极验、京东等)具体请问度娘。 实现 本次要讲的是方法一破解qq空间验证码,也是最简单的方法。(豆瓣网的原理一模一样,甚至连验证码图片都是一样的,不难猜测应该是使用了同样的验证码接口)方法一的关键在于我们怎么得到验证码的原图,我们把这个问题解决了其他的都好办了! 首先我们进入qq空间登录界面,随便输入一个qq号和密码点击登录按钮就会弹出滑块验证码,只能是电脑没有记录的才行。然后跳转到控制台–>element,我们可以很容易找到缺口图片和滑块图片,但是怎么也无法找到完整图片,很头疼吧! 得到两张图片之后,我们是不是就可以直接进行比较计算出缺口的距离的呢?按道理没错,但是这里有一个比较坑的地方就是我们下载下来的图片比网站中的图片要大,所以我们必须将图片缩小之后再进行计算。具体代码如下: def resize_img(self, img): """ 下载的图片把网页中的图片进行了放大,所以将图片还原成原尺寸 :param img: 图片 :return: 返回还原后的图片 """ # 通过本地图片与原网页图片的比较,计算出的缩放比例 原图(680x390)缩小图(280x161) a = 2.428 (x, y) = img.size x_resize = int(x // a) y_resize = int(y // a) """ Image.NEAREST :低质量 Image.BILINEAR:双线性 Image.BICUBIC :三次样条插值 Image.ANTIALIAS:高质量 """ img = img.resize((x_resize, y_resize), Image.ANTIALIAS) return img def is_pixel_equal(self, img1, img2, x, y): """ 比较两张图片同一点上的像数值,差距大于设置标准返回False :param img1: 阴影图 :param img2: 原图 :param x: 横坐标 :param y: 纵坐标 :return: 是否相等 """ pixel1, pixel2 = img1.load()[x, y], img2.load()[x, y] sub_index = 100 #比较RGB各分量的值 if abs(pixel1[0] - pixel2[0]) |
CopyRight 2018-2019 实验室设备网 版权所有 |