您的位置:首页 > 编程语言 > Python开发

随机验证码生成和获取——基于python tkinter、pytesseract实现

2017-11-10 16:54 726 查看
滴~ 今日打卡!

之前接触了一下tkinter,对GUI编程有点兴趣,所以就自己琢磨着写一个小程序(哈哈,小得不能再小的程序

)。嗯,毕竟是为自动化测试而学的这些东西,所以还是做个跟自动化测试有关系的咯。上周博主的笔记中有提到过写自动化登录脚本时,遇到验证码的解决办法。

之前提到了四种解决方式,先来回顾一下:

(1)去掉验证码:把验证码代码注释掉

(2)设置万能码

(3)验证码识别技术(通过python-tesseract识别图片验证码)

(4)记录cookie,绕过验证码(在用户登录之前,通过add_cookie()方法将用户名密码写入浏览器cookie,再次访问系统登录连接将自动登录)

   其中,第3种方法之前没有详细说到,今天就是使用tesserach来识别自己写的小程序中生成的随机验证码啦。

好的,代码之旅开始!

1.创建并初始化一个窗口

#Tk()是一个创建窗口的类

root = Tk()

#设置窗体大小

root.geometry("400x300")

#把root这个顶层窗体作为一个对象传入我们定义的window类

app = Window(root)

2.在窗体中绑定一些菜单和按钮,并给按钮添加一个command进行事务处理

edit=Menu(menu)

edit.add_command(label='获取验证码',command=self.readIdentifyingCode)

edit.add_command(label=u'生成英文验证码',command=self.showIdentifying_english)

menu.add_cascade(label='Edit',menu=edit)

3.写按钮的响应事务啦。这里有两个,一个是随机生成验证码,一个是扫描获取刚刚生成的验证码

(1)生成随机验证码

主要思路就是用random.randint()函数随机生成字符、背景色和text颜色。然后用ImageDraw.Draw逐点填充。生成一个image后对image做模糊化处理,就获得一个验证码图啦

分别写三个方法,随机生成字符、背景色及字体颜色:

return chr(random.randint(65,90))         #生成随机字符

return (random.randint(64,255),random.randint(64,255),random.randint(64,255))    #生成随机背景色/字体颜色

填充背景和生成随机4位验证码

draw=ImageDraw.Draw(image)

        for x in range(width):

            for y in range(heigth):

                draw.point((x,y),fill=Window.rndColor())       

        for t in range(4):

            draw.text((60*t+10,10),Window.rndChar(),font=font,fill=Window.rndColorTxt())

最后,对生成的图片做模糊处理

        image=image.filter(ImageFilter.BLUR)

好的,运行脚本,得到效果图如下



接下来,获取验证码。基本思路就是获取验证码图片,然后做二值化、增强对比度等一系列操作,然后调用pytesseract.image_to_string()方法去获取

image=Image.open(u'E:\自动化测试脚本\code.jpg')

image1=image.convert('L')    #图像加强,二值化

image2=ImageEnhance.Contrast(iamge1)   #增强对比度

image2=sharpness.enhance(2.0)

code=pytesseract.image_to_string(image2)

这样就可以获取到刚刚生成的随机验证码啦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息