python另类处理Google和12306的图形验证
随着反爬虫的深入,后来不仅有滑块验证,还出现了点选验证、图形验证、汉字图形验证、其中较为知名的是Google的图形验证和12306的图形验证,以及知乎出现的倒立汉字验证。
应对图形验证的方式除了对接专业的验证平台以外,我们还可以通过处Email、微信将图片发给自己来选择点击位置,今天就分享如何方便自己点击选择。
下面是一张12306图形验证码
遇到这种情况,在大型项目中一般直接对接专业处理平台,在小项目中就自己点选了,但是无界面模式下又怎么选择?那当然是通过邮件或者微信发送到手机,即使受到了验证码也很难做出处理。
但是将上面的图片处理一下做成下面的样子:
直接在微信回复图片中的编码,每个编号中间的十字光标就是选择该编号后会点击的坐标。同时可以定义图片分割的大小,可以分割得更加密集或者更加稀疏。
每个单元格就像一个像素位置,只是不同的是我们只需要说出编号,让程序自动找到坐标来点击。
代码如下:
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) #
当然效果就如下图所示:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python垃圾回收机制(GC)相关问题
在使用python中很少遇到内存溢出的问题,也不关心内存的管理问题,这是高级语言自带的处理机制,将内部的垃圾空间清除。 要清楚是怎么回收垃圾的,那我们应该先明白什么情况下产生垃圾,就涉及到python内部的对象管理方法。 对于int类型的变量在[5, 257)范围内是共用对象常驻内存,不在此范围内的话一个变量建立一个对象。 单个字符是常驻内存共用对象,字符串是引用计数机制(相同的值指向同一个对象) a=256 a1=256 b=257 b1=257 id(a)==id(a1)Out[6]:True id(b)==id(b1)Out[7]:False c1='a' c='a' d='sdsds4' d1='sdsds4' id(c)==id(c1)Out[12]:True id(d)==id(d1)Out[13]:True 首先在对象管理上已经做到了最小化的内存开销,并不是一个变量一个对象,而是多种方案结合。 那再看垃圾回收的机制,与C/C++有别的是python内部实现了自动的垃圾回收,而无需用户考虑什么时候销毁一个对象或变量。python的垃圾回收机制是以引用计数机制为主,标记-清除...
- 下一篇
python处理滑块验证的轨迹计算问题
在上一回中说了五行代码找图中滑块验证的缺口位置《python五行代码解决滑块验证的缺口距离识别,破解滑块验证》,本章讲轨迹相关的问题。 滑块验证核心是后台验证轨迹参数,效验轨迹取点的分布,正常情况是如下图的离散分布 如果横坐标x是时间、纵坐标y是位移,那么每个点的切线就是加速度,会发现这样的一个规律,加速度由小变大,再又大变小,这是最主要的特征之一。 速度的变化率如下: 对速度而言肯定是先加速在减速,但加速度不会是固定的,应该是变变加速和变变加速,不过目前实际应用中的情况来说,是以速度变化情况为主要判别依据,因为在以恒加减速度生成的轨迹应用中一样可以通过检测,就说明目前没有对是否恒定加速度来鉴别机器和人工。 知道上面的两点后我们就应该明白滑块验证的关键,并且可以预测它的下一步优化方式将是对加速度变化的验证,收集了两种轨迹生成方式:一种是以加减速为主的物理学生成方式,另一种是根据轨迹离散分布生成的数学生成。 defgenerate_tracks(S): """ :paramS:缺口距离Px :return: """ S+=20 v=0 t=0.2 forward_tracks=[] cu...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器