网站验证码的生成原理、难度控制,及python实现

news/2024/5/12 5:54:49/文章来源:https://blog.csdn.net/weixin_41624982/article/details/86711014

图片验证码已经广泛的使用在各种反爬虫的场景中,验证码的的生成验证过程对于开发者来说是零成本的,对于用户体验来说可能稍差、但是对于爬虫来说是致命的和高成本的。

下面将介绍使用python实现网站验证码的产生及验证的全过程,然我们对验证码的生成有所理解,同时对于机器识别在验证码利于的作用有个认识。

其过程是是用户请求验证后,生成验证码图片并后台session保存验证的字符串,当用户提交验证信息后,取出后台session中的字符集对比,相同的则验证通过。
def get(self):
from PIL import Image, ImageDraw, ImageFont
import random
# 定义变量,用于画面的背景色、宽、高
bgcolor = (random.randrange(20, 100), random.randrange(20, 100), 255)
width = 100
height = 25
# 创建画面对象
im = Image.new('RGB', (width, height), bgcolor)
# 创建画笔对象
draw = ImageDraw.Draw(im)
# 调用画笔的point()函数绘制噪点
for i in range(0, 100):
xy = (random.randrange(0, width), random.randrange(0, height))
fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
draw.point(xy, fill=fill)
# 定义验证码的备选值
str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
# 随机选取4个值作为验证码
rand_str = ''
for i in range(0, 4):
rand_str += str1[random.randrange(0, len(str1))]
# 构造字体对象
font = ImageFont.truetype('static/fonts/STLITI.TTF', 23)
# 构造字体颜色
fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
# 绘制4个字
draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
del draw
session["verifycode"] = rand_str
buf = io.BytesIO()
im.save(buf, 'png')
self.set_header('Content-Type', 'image/jpg')
self.write(buf.getvalue())

session["verifycode"] = rand_str是在网站后台的session中保存正确的验证值,在post提交登陆后进行对比。

buf = io.BytesIO()、im.save(buf, 'png')是创建bytes类型的内存对象用于保存生成的图片数据。

self.set_header('Content-type','image/jpg')
self.write(buf.getvalue()),构件response相应对象返回前端。

效果如下:

 

 


效果还是不错,生成验证码的复杂度和字符集相关、和字体相关、和噪点相关,也可以生成表达式类型的验证码,同时因为采取随机生成,几百万张图片中也不会存在相同的图片,可见验证码对于反爬虫而言任然是最简单、无成本的反爬虫措施。

------------------------------

ID:Python之战

|作|者|公(zhong)号:python之战 

专注Python,专注于网络爬虫、RPA的学习-践行-总结

喜欢研究技术瓶颈并分享,欢迎围观,共同学习。

独学而无友,则孤陋而寡闻!

---------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_856955.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pyppeteer持久化修改网站检测浏览器的特征值

在互联网前沿具有价值的网站,在反爬虫领域也做出了深有成效的反爬虫措施,其中浏览器环境检测、用户行为检测是目前对爬虫杀伤力最大的两条技术路线;而浏览器环境检测是以webdriver等几十个特征值为基础的爬虫识别; 此前讲过几篇关…

网站被CC攻击!2个方法教你如何做好防护

CC攻击(Challenge Collapsar)是DDOS(分布式拒绝服务)的一种,也是一种常见的网站攻击方法,攻击者通过代理服务器或者肉鸡向向受害主机不停地发大量数据包,造成对方服务器资源耗尽,一直…

利用享元模式模拟网站对象建立 C++

1. 享元模式的概念 享元模式, 运用共享技术可以有效的支持大量细粒度的对象。 利用享元工厂, 用来创建并且管理 享元对象。 我们把享元对象内部并且不会随着环境改变而改变的部分, 称为是享元的内部对象, 而把随着环境改变而改…

建站的辛酸历程

1、首先需要服务器和域名,域名当时看某博主写的新网,然后就选了一个买下,还没绑定个人信息就收到了平均一周俩骚扰电话。强烈不建议新网。 万网被阿里收购了,如果买阿里云的服务建议直接万网选域名,域名买好后还需要备…

Python爬虫模拟登录带验证码网站

点我进入原文 Python爬虫模拟登录带验证码网站 这篇文章主要介绍了Python爬虫模拟登录带验证码网站的相关资料,需要的朋友可以参考下 爬取网站时经常会遇到需要登录的问题,这是就需要用到模拟登录的相关方法。python提供了强大的url库,想做到这个并不难。…

scrapy 学习笔记1 爬取 www.dmoz.org 网站信息

1. 安装配置 具体的安装过程, 官网已经写的很清楚了http://doc.scrapy.org/en/latest/intro/install.html#windows不过在实际安装过程中还是遇到了一个小问题: ie, 缺少microsoft visual c 9.0 运行库, 上图中已经告诉我们了解决方法&am…

基于 flask 框架的模拟instagram 图片分享网站的开发

1. 前言 我们的目标是模拟instagram 制作一个图片分享的网站, 我们这里选用的是 flask 框架, 这个框架小巧, 易于扩展, 简单易用 2. 基本思路 利用sqlalchemy 构建 数据库 orm, 建立 user, image&#x…

基于 flask 框架的模拟instagram 图片分享网站的开发 2

1. 前言 我们之前写过一篇博文http://blog.csdn.net/zhyh1435589631/article/details/51787577, 在那篇博文里面, 我们完成了instagram 网站开发的几个基本功能, 包括首页展示, 个人信息页面显示, 图片详情页面展示等…

基于 flask 框架的模拟instagram 图片分享网站的开发 3

1. 摘要 这次添加的功能是 实现首页和 个人信息页面的异步加载功能 传送门: 基于 flask 框架的模拟instagram 图片分享网站的开发 2 基于 flask 框架的模拟instagram 图片分享网站的开发 1 2. 流程 2.1 profile.js 分析 这里需要编写相应的js 代码&#xff0…

基于 flask 框架的模拟instagram 图片分享网站的开发 4

1. 摘要 这次添加的功能是 个人页图片上传功能和图片详情页评论异步加载功能 传送门: 基于 flask 框架的模拟instagram 图片分享网站的开发 3 基于 flask 框架的模拟instagram 图片分享网站的开发 2 基于 flask 框架的模拟instagram 图片分享网站的开发 1 2. …

基于 flask 框架的模拟instagram 图片分享网站的开发 7 (爬虫机器人)

1. 前言 我们之前使用flask实现了一个模拟instagram的图片分享网站的开发, 但是图片的更新需要用户上传, 但是由于用户比较少, 鉴于这个问题, 我们就考虑引入一个爬虫机器人, 自动的向web程序相关的数据库表项中写入数…

url带斜杠和不带斜杠对seo优化的影响

点我进入原文 ps: seo 是指搜索引擎优化 url带斜杠和不带斜杠对seo优化的影响 作为seo的专员对于这个问题,我觉得很多细心的人都能发现,这二者的区别,但是不知道其中奥妙。今天博主给大家说说关于搜索引擎网址中带/与不带/对于seo的影响。 在…

高并发高流量网站架构

http://blog.csdn.net/SmartTony/archive/2010/09/09/5874485.aspx Web2.0的兴起,掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批新生的网站,也极大的方便了上网…

从“奥运门票网站800万访问量”想到的成本、质量、进度、风险等关系

看到这个新闻后颇有一番滋味,更体验到我一直关注的软件性能着实无处不在,这个案例也确实值得我们好好反思一下。 不知道网友们有没有报名参加国际日语考试的——这个网站每年05年前都有人不能报名,因为报名人数太多,所以报名当日大…

h5跳微信小程序流程实现——使用云函数,不开通静态网站

官方开源库: GitHub TCloudBase/WXSEVER-SMS 参考教程: https://developers.weixin.qq.com/community/develop/doc/000ae2a7a7c9402a4d8bca2875b409 此教程为官方提供,包含视频文档 步骤: 1. 开通云开发 2. 新建云函数 ope…

搜索引擎SEO外挂:一边搜索,一边看PageRank

搜索引擎SEO外挂:一边搜索,一边看PageRank 下载地址:多么乐站长工具 我原来曾写过一篇统计分析搜索引擎排名和Page Rank 关联分析 的文章。很多人引用,回复和我讨论了我的结论。有赞成的,有反对的,有鼓励的…

seo优化:把百度放进数据库

seo优化:把百度放进数据库 有时候我想,能把百度的数据放进数据库,用广大程序员熟悉的sql语句查询百度的搜索结果应该是一个不错的主意。在这方面Google早已经跨出了一大步,利用Google Search API 把Google的搜索结果放进数据库是很容易办到得…

商业网站 第八章 注册登陆模板设计

注册——插入记录 服务器行为——添加——插入记录——连接:web_ljdata——插入到表格:T_user——获取值自:form1(注册表单)——表单元素——注册成功后:插入后转到(注册成功表单) 验证登陆信息 数据库面板…

网站推荐机制中的艺术、科学与商务问题

网站推荐机制是电子商务或内容网站的核心功能之一。例如你在一个网站买了一本书后,网站会推荐其他你可能会感兴趣的书。这被认为是亚马逊等电子商务巨头成功的关键。本文对几个出色的推荐系统进行了较透彻的分析。 2006年10月,Netflix搞了一次不寻常的有…

平面设计素材网站-庞姿姿

哈喽,大家好!今天为大家分享的是免费的平面设计素材网站,设计类网站是大家在所难免需要的了吧,下面就是我发现的比较好用的免费的平面设计素材网站,感兴趣的小伙伴看过来,如果你还发现其它好的网站评论一起…