python+Selenium之自动滑块破解滑块验证码

Python016

python+Selenium之自动滑块破解滑块验证码,第1张

头大系列:以虎嗅网注册页面的滑块验证码为例:

打开浏览器调试工具,点击左上角按钮进行页面元素跟踪,然后将鼠标移动到滑块验证码的图像上,就发现问题了,这也是关键所在:

验证码的图像是由很多个这样的10x58(宽10高58)的小方块拼接而成的。再检查一下元素标签,发现每一个小方块的元素标签里面都有background-image:url以及background-position这两个关键的信息。

既然是url,就不妨打开链接来观察。发现打开的链接是一张图片,但却是一张乱七八糟的图片。

得到这张乱七八糟的图片,第一感觉是重影。试猜想,会不会将每一个小方块的url链接图片都重叠在一起或拼接在一起就能组成我们所看到的验证码图片。

但经打开每一张图片发现,每个小方块后面的url链接的图片是一样的。

这就说明不可能是将图片进行重叠或拼接了。那就有可能是另外一种可能:将这张完整的验证码图片的部分区域切割然后打乱排序,形成一张新的图片,而这张新的图片就是我们现在所看到的乱七八糟的图片。

再观察发现,每个小方块后面还有background-position这个重要的信息。发现里面正是-157px -58px-145px -58px这种形式,是不是很像坐标的形式了。而进一步猜想,将我们刚刚的乱七八糟的图按每一个小方块的坐标进行切割,然后再进行排序,是不是就能得到原来完整的验证码图片了。

进行实践:

运用PIL模块的切割crop()以及粘贴paste(),重新将图片进行整合。效果神奇出现:

先不管其他了的。先把两张完整的图片拼接出来再进行下一步吧。

按照相同的方法,找到页面元素中鼠标点击后的出现缺口的验证码图片位置,找到缺口图片乱七八糟的url链接。

通过相同方法拼接:

已经得到两张关键的验证码图片,那接下来就是PIL大显身手的时候了,对比两张图片的像素点,缺口位置明显黑了一块,也就是RGB三色必然与周围的像素RGB三色差别明显。

将两张图片的每个像素点进行遍历对比,RGB三色任意一色差距大于一定的范围即视为是滑块的缺口。

找到缺口之后返回遍历的像素点的x坐标值(因为滑块只能X轴左右移动,所以y轴可以不需要用到),而x坐标就是滑块需要移动的距离。

完美拼接。但被吃了,也是美中不足:

快速,匀速,准确,所谓的“快,准,稳”,一样不差。

那就认定你是机器人来滑动的吧,把你吃掉!

方法1:找个验证码识别程序,自动识别

方法2:自己用PIL写一个

方法3:让用户手工输入验证码。这个比较简单

方法4:让后台程序开一个后门,让你绕过验证码

方法5:直接使用cookie,这样就不用登陆了

在学习Python之前 肯定都自己了解过这门语言,也知道Python有很多的学习方向,比如说数据采集方向(爬虫),或者Web开发方向,也可能是最近特别火热的人工智能方向。每个方向所需要的技术都是不尽相同的,所以在我们学习完成Python的基础语法之后,一定要慎重选择自己之后的进阶方向。通用必备基础知识:(这些知识不管是做python哪方面,都是基础性知识,都必须会)。

1.学习python基础语法知识

2.学习网络编程,熟悉线程、进程、等网络编程基本原理

3.学习MySQL,能熟练对数据库数据的增删改查命令,面试也会经常问到(有条件学习下mongodb和redis,尤其是redis,现在很多技术都利用到了redis的优秀特性,比如爬虫的去重、分布式爬虫、数据缓存等等)

4.学习正则表达式,用于数据的提取 re模块。

5、前端入门html\\css\\jquery,用于分析网页页面结构,能读懂前端人员编写的代码含义。

转型爬虫学习的知识:1.requests库:发送网页请求,返回数据。

2.xpath:用于网页元素的提取(当然还有bs4、pyquery等,选择顺手的)。

3.selenium:用于真实浏览器访问网页,根据具体情况使用。

4.scrapy:用于大规模快速网页数据爬取。

5.验证码破解:验证码破解建议大家可以多搞点难破解的,比如滑块验证码、淘宝验证码、12306验证码等等,面试经常问到哦。

6、web后台库和框架:django、flask、tornado,三个框架各有优劣,web框架小编用django和flask居多,django觉得很多东西都已经封装好了,可以直接用,不用自己手动构造,比如django的admin后台和xadmin后台,flask就相对灵活多变,还是那句话,至少掌握两个框架,多多益善。

因为入门编程并不是一件分分钟就能做到的事情,多以你要坚持每天打卡。不要三天打鱼两天晒网。要循序渐进,温故而知新。