内容导航:# 图片颜色,h = 10 #距离图片上边距离,h = 10 #距离图片上边距离,# 实例一个图片对象240 x 60
  • Python如何制作图片验证码的简单实例
  • python3 使用selenium过程中遇到验证码请问如何识别验证码 搜
  • 怎么通过python获取验证码图片
  • 使用Python进行验证码识别案例无法验证通过SOS
  • {image}

    一 、Python如何制作图片验证码的简单实例

    本篇文章主要介绍了Python简单的制作图片验证码实例 ,具有一定的参考价值 ,感兴趣的小伙伴们可以参考一下
    这里示范的验证码都是简单的,你也可以把字符扭曲

    Python第三方库无比强大,PIL 是python的一个d第三方图片处理模块 ,我们也可以使用它来生成图片验证码

    PIL安装

    命令安装:
    pip install pillow例子:生成图片,并填充文字

    !/usr/bin/python

    --coding:utf-8--

    from PIL import Image, ImageDraw, ImageFont, ImageFilter

    实例一个图片对象240 x 60:

    width = 60 * 4
    height = 60

    图老滑搭片颜色

    clo = (43, 34, 88) # 我觉得是紫蓝色
    image = ('RGB', (width, height), clo)

    创建Font对象:

    字体文件可以使用操作系统的,也可以网上下载

    font = ('./font/', 36)

    创建Draw对象:

    draw = (image)

    输出文让信字:

    str1 = "ren ren Python"
    w = 4 #距离图片左边距离
    h = 10 #距离图片上边距离
    ((w, h), str1, font=font)

    模糊:

    ()
    code_name = 'test_code_'
    save_dir = './{}'.format(code_name)
    (save_dir, 'jpeg')
    print("已保存图片: {}".format(save_dir))(venv) allenwoo@~/renren/code$ python
    已保存图片: ./test_code_图片如下:
    文字没有什么色彩 ,我们也可以加上颜色,只需要在 text 中传人 fill 参数就好
    ((w, h), str1, font=font, fill = (78, 64, 65))随便加的颜色

    我们还可以把背景弄成很多个小点,每隔n隔像素填充个其他颜色比如:

    !/usr/bin/python

    --coding:utf-8--

    from PIL import Image, ImageDraw, ImageFont, ImageFilter

    实例一个图片对象240 x 60:

    width = 60 * 4
    height = 60

    图片颜色

    clo = (43, 34, 88) # 我觉得是紫蓝色
    image = ('RGB', (width, height), clo)

    创建Font对象:

    字体文件可以使用操作系统的,也可以网上下载

    font = ('./font/', 36)

    创建Draw对象:

    draw = (image)

    填充像素:

    宽每隔 20 , 高每隔5, 形成坐标x,y

    红色:220,20,60

    for x in range(0, width, 20):
    for y in range(0, height, 5):
    ((x, y), fill=(220, 20, 60))

    输出文字:

    str1 = "we are renren"
    w = 4 #距离图片左边距离
    h = 10 #距离图片上边距离
    ((w, h), str1, font=font, fill = (78, 64, 65))

    模糊:

    ()
    code_name = 'test_code_'
    save_dir = './{}'.format(code_name)
    (save_dir, 'jpeg')
    print("侍拿已保存图片: {}".format(save_dir))结果图片:

    PIL制作验证码
    利用以上这些,还有我们之前学习的随机生成器random就可以做个验证码了,

    生成验证码代码

    !/usr/bin/python

    --coding:utf-8--

    from uuid import uuid1
    from PIL import Image, ImageDraw, ImageFont, ImageFilter
    import random
    def rnd_char():
    '''
    随机一个字母或者数字
    :return:
    '''

    随机一个字母或者数字

    i = (1,3)
    if i == 1:

    随机个数字的十进制ASCII码

    an = (97, 122)
    elif i == 2:

    随机个小写字母的十进制ASCII码

    an = (65, 90)
    else:

    随机个大写字母的十进制ASCII码

    an = (48, 57)

    根据Ascii码转成字符 ,return回去

    return chr(an)

    干扰

    def rnd_dis():
    '''
    随机一个干扰字
    :return:
    '''
    d = ['^','-', '~', '_', '.']
    i = (0, len(d)-1)
    return d[i]

    两个随机颜色都规定不同的区域,防止干扰字符和验证码字符颜色一样

    随机颜色1:

    def rnd_color():
    '''
    随机颜色,规定一定范围
    :return:
    '''
    return ((64, 255), (64, 255), (64, 255))

    随机颜色2:

    def rnd_color2():
    '''
    随机颜色 ,规定一定范围
    :return:
    '''
    return ((32, 127), (32, 127), (32, 127))
    def create_code():

    240 x 60:

    width = 60 * 4
    height = 60
    image = ('RGB', (width, height), (192, 192, 192))

    创建Font对象:

    font = ('./font/', 36)

    创建Draw对象:

    draw = (image)

    填充每个像素:

    for x in range(0, width, 20):
    for y in range(0, height, 10):
    ((x, y), fill=rnd_color())

    填充字符

    _str = ""

    填入4个随机的数字或字母作为验证码

    for t in range(4):
    c = rnd_char()
    _str = "{}{}".format(_str, c)

    随机距离图片上边高度 ,但至少距离30像素

    h = (1, height-30)

    宽度的化,每个字符占图片宽度1/4,在加上10个像素空隙

    w = width/4 * t + 10
    ((w, h), c, font=font, fill=rnd_color2())

    实际项目中,会将验证码 保存在数据库 ,并加上时间字段

    print("保存验证码 {} 到数据库".format(_str))

    给图片加上字符干扰,密集度由 w, h控制

    for j in range(0, width, 30):
    dis = rnd_dis()
    w = t * 15 + j

    随机距离图片上边高度,但至少距离30像素

    h = (1, height - 30)
    ((w, h), dis, font=font, fill=rndColor())

    模糊:

    ()

    uuid1 生成唯一的字符串作为验证码图片名称

    code_name = '{}.jpg'.format(uuid1())
    save_dir = './{}'.format(code_name)
    (save_dir, 'jpeg')
    print("已保存图片: {}".format(save_dir))

    当直接运行文件的是和 ,运行下面代码

    if name == "main":
    create_code()(venv) allenwoo@~/renren/code$ python
    保存验证码 ef3k 到数据库
    已保存图片: ./
    (venv) allenwoo@~/renren/code$ python
    保存验证码 I37X 到数据库
    已保存图片: ./
    (venv) allenwoo@~/renren/code$ python
    保存验证码 vVL1 到数据库
    已保存图片: ./
    (venv) allenwoo@~/renren/code$ python
    保存验证码 K6w3 到数据库
    已保存图片: ./

    你觉得难不难呢?最后这个生成验证码代码中有些逻辑问题要理解下

    二 、python3 使用selenium过程中遇到验证码请问如何识别验证码 搜

    其实cookie最终都放到header里面的 。 自己登陆一次后,再刷新一下首页就能看到requests里面的header里有cookie字段了 。 所以直接加到header也行。大家在使用qtp进行自动化测试的过程中经常会遇到图片验证码的问题——大家所关心的就是如何解决此类问题。 这里我们首先要去了解为什么会有图片验证码 。其实验证码的本质作用就是防止有人利用工具(灌水机、注册机,当然也不小心包括了我们的自动化测试工具)恶意猜解登陆或者不停的注册和灌水的。因此如果我们完全寄希望于通过gui识别来获取内容是不切实际的——先打好预防针 ,免得读者希望太大,失望更大,呵呵! 下面说说验证码的解决思路:其实解决图片验证码的思路有很多 ,我这里主要结合qtp9.5的新特性给大家介绍其中一种解决方案,就是利用它的ocr机制抓取文本内容。 在qtp9.5中,对象识别能力有了进一步改善 ,其中针对文本识别方面进行了优化 ,引入了abbyy公司的ocr解决方案——这个相关的功能体现在qtp菜单的“tools-->options-->general --use text recognition mechanisms in this order”里,详细内容后面会有具体介绍 。 先来看看abbyy是何许公司,登录他们的官方网站可以看到一段相关介绍:“abbyy是世界ocr(光学字符识别)、icr(手写体识别)和语言软件的领航者。abbyy 致力于人工智能(ai)和语言软件开发。提供全套文档识别 ,转换和数据捕获技术的产品解决方案 。 ”如果你使用过图像文档转换的软件,一定会听说过finereader ocr professional ,其实它就是abbyy公司的产品 ,用官方的说法就是“将通过扫描仪 、mfp 或数码相机生成的图像快速转换为可编辑和可搜索的电子格式,而且识别率很高 ”,说白了就是可以借助它先进的ocr机制“读”出图片里的文本内容 ,并转换为pdf之类的文档。 有了abbyy这么强大的背后支持,qtp自然底气十足,那么qtp到底如何以ocr机制识别文本呢?我们首先先了解一下什么是ocr。打开“百度百科_ocr” ,它的说明:“ocr(optical character recognition,光学字符识别),是属于图型识别(pattern recognition ,pr)的一门学问 。其目的就是要让计算机知道它到底看到了什么 ,尤其是文字资料。 由于ocr是一门与识别率拔河的技术,因此如何除错或利用辅助信息提高识别正确率,是ocr最重要的课题 ,icr(intelligent character recognition)的名词也因此而产生。而根据文字资料存在的媒体介质不同,及取得这些资料的方式不同,就衍生出各式各样、各种不同的应用 。 ”这里有个关键词:“正确率” ,也就是“识别率”——既然不能够总是100%,我们自然不可能完全寄希望于通过qtp能够每次100%正确的去识别图片里的文本 。尤其是“道高一尺魔高一丈 ”的今天,验证码加入了大量的干扰素 ,如扭曲、变形 、错位、随机背景花纹,给ocr识别增加了很多难度——本来就不希望被软件识别到嘛。 本文出自songfun的51testing软件测试博客,转载请保留出处及链接:/?songfun 了解了ocr之后 ,我们再来看看qtp对应的这个设置。如前面所说,通过qtp菜单的“tools-->options”选中到“general--use text recognition mechanisms in this order”,这里的四个选项就是对应的不同设置 。我们看看帮助的描述(我做了翻译): 使用文本识别机制 指定qtp在采用 “文本 ”或者“文本区域” 的 检查点或输出值 的步骤时 ,捕获文本内容所使用的文本识别机制。 以下有三种识别方式: 1、先使用windows api ,再使用ocr(默认)。 指示qtp首先尝试以基于windows api的机制从对象上直接获取文本内容 。如果未获取到文本(比如,文本属于图片的一部分),qtp就会使用ocr的机制尝试获取这段文本。 强烈建议在使用中日韩(象形文字) 、英的语言环境下采用这个设置。 2、先使用ocr ,再使用windows api 。 指示qtp首先尝试使用ocr机制从对象上去获取文本。如果未获取到文本,qtp就会以windows api的机制去获取文本内容。 3、仅使用windows api方式 。 指示qtp仅采用基于windows api的机制从对象上获取文本内容。 4 、仅使用ocr的方式。 指示qtp仅采用基于ocr的机制从对象上获取文本内容 。 在使用windows vista要使用这种方式 。 上面的内容已经解释的很明确了,接下来我们通过textarea output value看看效果。 (一)、内容是51testing的 ,qtp获取正确;内容是51testing的g风格彩字,qtp获取错误(显示为ic_check_pattern) (二)、内容是songfun的普通文本,qtp获取正确;内容是songfun的g风格彩字 ,qtp获取错误(也显示为ic_check_pattern) 有兴趣大家可以自己做一些图片,甚至可以用qq的验证码图片来试验一下,看看ocr效果。

    三 、怎么通过python获取验证码图片

    因为验证码图片是禁止缓存的  ,当然无法用缓存函数获取了 。 解决方法有很多。可以用同样的会话再次请求得到图片。关于此类图片保存在哪里,请阅读相关资料p_url='验证码图片地址'
    pic = (p_url)
    content = ()
    f = open('本地图片地址','wb')
    (content)
    ()

    四 、使用Python进行验证码识别案例无法验证通过SOS

    源码:#coding:utf-8#build by LandGrey 2016-05-17try: import pytesseract from PIL import Imageexcept ImportError: print "模块导入错误,请用pip安装 ,pytesseract依赖以下库:" raise SystemExitimg = (r'F://work//test//python//')vcode = _to_string(img)print vcode执行结果F:\work\test\python>python ck (most recent call last): File "", line 11, in vcode = _to_string(img) File "build\-amd64\egg\pytesseract\", line 193, in image_to_string File "build\-amd64\egg\pytesseract\", line 130, in run_and_get_output File "build\-amd64\egg\pytesseract\", line 69, in save_image File "build\-amd64\egg\pytesseract\", line 65, in prepareTypeError: Unsupported image object使用的python 版本2.7Unsupported image object 估计是你的png内容不规范 。。。
    先规范下格式再用吧 。
    (r'F://work//test//python//').save("")
    img = ("")
    vcode = _to_string(img)是不是PIL需要的依赖图像支持没有下?
    试试这个
    sudo apt-get install zlib1g-dev
    sudo apt-get install libfreetype6-dev
    sudo apt-get build-dep python-imaging
    能安装的都安上pillow没有安装好

    再看看别人怎么说的。

    本文版权归趣快排www.sEoguruBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ✈61910465