python自动识别验证码,python自动化测试图片验证码
本文介绍了python自动测试破解图文验证码的解决方案,并通过实例代码进行了详细介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
对于web应用,出于安全考虑,登录时总是设置验证码。
验证码有很多种,比如识别图片中的数字和字母的,点击图片中指定文字的,有算术计算结果的。更复杂的是滑动验证。
这样的验证码增加了我们系统的安全性,但是对于我们的测试人员来说,无疑是自动化测试过程中的一个棘手问题。
1、Web 自动化验证码解决方案
一般在我们的测试过程中,当登录遇到上述验证码时,有以下几种解决方法:
首先让开发者去掉第二个验证码,设置一个通用的验证码第三个,通过cookie绕过登录第四个,通过自动识别技术识别验证码
2、验证码解决方案
。#编码:utf-8
导入操作系统
导入子流程
从PIL进口图片
def get_captcha(驱动,captcha_id,full_screen_img_path,captcha_img_path,captcha_final_path,txt_path,ocr_path):
#浏览器界面截图
driver.save _截图(full_screen_img_path)
#找到验证码图片并获取其坐标
element=driver . find _ element _ by _ id
left=element.location[x]
top=element.location[y]
right=element . location[ x ]element . size[ width ]
bottom=element . location[ y ]element . size[ height ]
left,top,right,bottom=int(左),int(上),int(右),int(下)
img=Image.open(全屏_ img _路径)
img=img.crop((左,上,右,下))
#获取验证码图片
img.save(验证码_ img _路径)
#打开验证码图片
img=image . open(captcha _ img _ path)
#颜色直方图,255种颜色,255种白色。
#创建一张新图片(大小与原图片相同,背景色为255白色)
img_new=Image.new(P ,img.size,255)
对于范围内的x(img . size[1]):
对于范围(img.size[0]):内的y
#遍历图片的xy坐标像素颜色
pix=img.getpixel((y,x))
#打印(像素)
#给自己上色,r=0,g=0,b0是蓝色
如果pix[0] 20和pix[1] 20和pix[2] 50:
#把遍历结果放到新图片上,0为透明不透明。
img_new.putpixel((y,x),0)
img _ new . save(captcha _ final _ path,format=png )
#通过tesseract工具解析验证码图片生成文本。
os.system(ocr_path)
#读取txt文件中的验证码
用open(txt_path, r )作为f:
if f.read():
t=f.read()。条状()
#删除中间的空格
如果t:中的“”
t=t.replace( ,)
如果t.isdigit()和len(t)==4:
返回t
else:
返回“失败”
def check_resp(结果,消息):
如果结果中有消息:
返回“通过”
else:
返回“失败”
#接口识别验证码
def get_captcha(验证码_ img _路径,验证码_最终_路径,txt _路径,ocr _路径):
#打开验证码图片
img=image . open(captcha _ img _ path)
#创建一张新图片(大小与原图片相同,背景色为255白色)
img_new=Image.new(P ,img.size,55)
对于范围内的x(img . size[1]):
对于范围(img.size[0]):内的y
#遍历图片的xy坐标像素颜色
pix=img.getpixel((y,x))
#打印(像素)
#给自己上色,r=0,g=0,b0是蓝色
如果pix[0] 20和pix[1] 20和pix[2] 50:
#把遍历结果放到新图片上,0为透明不透明。
img_new.putpixel((y,x),0)
img _ new . save(captcha _ final _ path,format=png )
#通过tesseract工具解析验证码图片生成文本。【Tesseract-OCR必须和jpg的根目录相同,比如驱动器C和驱动器D!】
os.system(ocr_path)
#读取txt文件中的验证码
用open(txt_path, r )作为f:
if r.read():
t=f.read()。条状()
#删除中间的空格
如果t:中的“”
t=t.replace( ,)
#如果是数字,长度为4,则返回数字,否则返回fail
如果t.isdigit()和len(t)==4:
返回t
else:
返回失败
关于python破解图形验证码的这篇文章到此结束。希望对大家的学习有所帮助,也希望大家能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。