图形解锁验证码破解(附Python代码)

前言:

爬虫开源死得快,新浪微博又改策略了。在去年的这个时候,微博还是没什么限制的。2016年12月我将新浪微博爬虫的代码作了一次更新,并将文章转到了知乎,爬微博的人似乎从那个时候开始多了许多。也许是这个缘故,微博开始对IP设了限制,接着禁了原来免验证码的登录方式,现在将weibo.cn的登录途径也关了,weibo.cn采用m.weibo.cn的登录,登录过程中可能出现图形解锁验证码。这种验证码比较少见,因为多用在手机平台。

我怀疑QQ交流群(537549079)里应该是有新浪微博反爬虫的人,不过这也没什么关系,我们做爬虫的,本来就是带头“制造麻烦”的人,没有被请去喝茶,就已经要感恩了。另外需要声明一点,其实我个人并不需要微博数据,平时自己也没有爬,只是出于责任,既然把项目开源了,就有义务持续维护更新下去。另外是出于兴趣爱好,作为一名爬虫工作者,出现了新的反爬机制,我自己也是很兴奋 很想去研究突破的。

废话少说,上代码:WeiboSliderCode
运行效果:
微博登录



正文:

看到这种验证码时的第一感觉就是,效果还挺酷!第二感觉是,要破应该不难。
背景很干净,基本上不需要除噪;如果要写程序破解,只需要判断哪些点之间有连线,以及箭头的指向即可。背景和线条的像素很规范,使得我们只需要判断像素变化就可以很清晰地识别线条和箭头方向。

图片是由一个个像素组成的,Image打开图片后一个像素包含三个数值,分别代表RGB数值。将图片转为灰度图像后,每个像素只有一个数值,从0到255(从黑到白)。将图形解锁验证码的图片灰度化,可以发现图片背景值为253,线条的灰度值都为小于253的数。
这里写图片描述

缩小一下,来看看整张图:
这里写图片描述
是不是感觉这识别难度似乎也并不大?


后来我仔细想了一想,好像哪里不对劲,这验证码,,才四宫格!!这意味着什么?
四个点的连线,最多有多少种可能?手指掐一下也能算出:4*3*2*1=24。总共才24种可能,我只要手动收集这24张图,人工标识轨迹。以后每次遇到验证码,只要比对一下这24张图的像素值就能知道轨迹方向了呀!
哭笑不得,这验证码还真是简单得不行!

我们给四宫格的四个点定编号:1、2、3、4。如下图。则轨迹可以标记为:”2314”。
图形解锁验证码

接下来收集24张图:
图形解锁验证码2

然后将各个图片转为像素矩阵,见Github代码中的 ims.py 文件。
当遇到一张新图片后,对比ims.py存的24张图的像素,得出轨迹方向。然后程序模拟操作鼠标滑动解锁。运行的效果图上面已经有了。感兴趣的可以拿代码运行一下。

程序运行步骤:

  1. 安装Python2.7,安装谷歌浏览器(Chrome)。
  2. 根据Chrome的版本下载chromedriver.exe(参考http://blog.csdn.net/huilan_same/article/details/51896672),解压放在Chrome的安装目录,并将该路径加入到环境变量。
  3. 需要安装的Python模块:PIL、StringIO、selenium。
  4. 运行 login.py



结语:

群里爬微博的,多是需要数据写论文的学生,其中很多都是非计算机专业的同学,可能抓取微博的过程中会遇到各种问题。还是那句话,需要数据的,爬之前尽量先找群里有数据的同学要,有偿也可以,因为数据抓取本来就是需要投入大量时间和人力的。尽量不要给微博官方造成不必要的麻烦。

我喜欢追求技术,但不希望自己会给他人造成很大困扰,谢谢!如果有什么问题请留言。



转载请注明出处,谢谢!(原文链接:http://blog.csdn.net/bone_ace/article/details/71056741

猜你喜欢

转载自blog.csdn.net/Bone_ACE/article/details/71056741