博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python另类处理Google和12306的图形验证
阅读量:6229 次
发布时间:2019-06-21

本文共 1634 字,大约阅读时间需要 5 分钟。

随着反爬虫的深入,后来不仅有滑块验证,还出现了点选验证、图形验证、汉字图形验证、其中较为知名的是Google的图形验证和12306的图形验证,以及知乎出现的倒立汉字验证。

应对图形验证的方式除了对接专业的验证平台以外,我们还可以通过处Email、微信将图片发给自己来选择点击位置,今天就分享如何方便自己点击选择。

下面是一张12306图形验证码

2019-03-12-17_33_18.png

遇到这种情况,在大型项目中一般直接对接专业处理平台,在小项目中就自己点选了,但是无界面模式下又怎么选择?那当然是通过邮件或者微信发送到手机,即使受到了验证码也很难做出处理。

但是将上面的图片处理一下做成下面的样子:

2019-03-12-17_33_18.png

直接在微信回复图片中的编码,每个编号中间的十字光标就是选择该编号后会点击的坐标。同时可以定义图片分割的大小,可以分割得更加密集或者更加稀疏。

2019-03-12-17_33_19.png

2019-03-12-17_33_19.png

每个单元格就像一个像素位置,只是不同的是我们只需要说出编号,让程序自动找到坐标来点击。

代码如下:

from PIL import Image from PIL import ImageDraw, ImageFont def images(file, n, m):     """     :param file: 图片路径     :param n: x轴切割多少份     :param m: y轴切割多少份     :return:      """    img = Image.open(file)     img_d = ImageDraw.Draw(img)     x_len, y_len = img.size     x_ = x_len // n     y_ = y_len // m     print(x_*y_)     for x in range(0, x_len, x_):         img_d.line(((x, 0), (x, y_len)), (0, 0, 180))     for y in range(0, y_len, y_):         img_d.line(((0, y), (x_len, y)), (0, 0, 180))     fontsize = min(y_, x_)*3//4     draw = ImageDraw.Draw(img)     ttfont = ImageFont.truetype('simsunb.ttf', fontsize)     data = dict()    # 每个编号及其对应坐标的字典     i = 1     while i <= n*m:         for yy in range(y_//2, y_len, y_):             for xx in range(x_//2, x_len, x_):                 data[i] = (xx, yy)                 i += 1     for key, value in data.items():         xx, yy = value         draw.text((xx-fontsize*1.5/4, yy-fontsize*0.5), str(key), fill=(255, 0, 0),                   font=ttfont)         img_d.line(((xx-2, yy), (xx+2, yy)), (0, 0, 180))         img_d.line(((xx, yy-2), (xx, yy+2)), (0, 0, 180))     img.show()     img.save('ii.png') if __name__ == '__main__':     images('1.png', 14, 10)    #

当然效果就如下图所示:

2019-03-12-17_33_19.png

转载地址:http://kaxna.baihongyu.com/

你可能感兴趣的文章
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
非监督学习算法:异常检测
查看>>
jquery的checkbox,radio,select等方法总结
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
我的友情链接
查看>>
nginx在reload时候报错invalid PID number
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
[MicroPython]TurniBit开发板DIY自动窗帘模拟系统
查看>>
Python3.4 12306 2015年3月验证码识别
查看>>
从Handler.post(Runnable r)再一次梳理Android的消息机制(以及handler的内存泄露)
查看>>
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
JDBC的事务
查看>>
Io流的概述
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>