自动化测试中的验证码识别python代码

在部分登录页面中有验证码,在自动化测试用例中解决验证码问题的方案:

1.去掉验证码:让开发先隐藏验证码,这是最简单的方式

2.设置一个万能验证码:也就是在代码中留个后门,这是最有效的方式

3.验证码识别技术

4.添加cookie,绕过登录


这里介绍一下验证码识别:

(1)原理:首先是对页面截屏--->找到验证码的位置--->保存验证码图片--->图片转文本识别验证码

(2)环境准备:

  • 安装pytesseract ,在python中用pip命令安装在python\lib\site-packages下:pip install pytesseract
  • 安装PIL,在python中用pip命令安装在python\lib\site-packages下:pip install pillow
  • 安装tesseract-OCR ,在python中用pip命令安装在python\lib\site-packages下:pip tesseract-OCR
  • 在添加环境变量TESSDATA_PERFIX,值为:D:\Python27\Tesseract-OCR\tessdata

代码如下:

from selenium import webdriver
import time
import pytesseract
from PIL import Image
import unittest
import re
import os
os.chdir('..\Lib\site-packages\pytesseract')


driver= webdriver.Chrome()
driver.maximize_window()
driver.implicitly_wait(10)
driver.get("http://...")


driver.save_screenshot('d:/image/aa.png')

img = driver.find_element_by_id('codeImage')
location = img.location
size = img.size
zuobiao = (int(location['x']), int(location['y']), int(location['x']+size['width']), int(location['y']+size['height']))

print (zuobiao)
i = Image.open("d:/image/aa.png")

bb = i.crop(zuobiao)

bb.save("d:/image/bb.jpg", "jpeg")

cc = Image.open('d:/image/bb.jpg')

text = pytesseract.image_to_string(cc).strip()


text1 = re.sub("\D", "", text)
print(text1)


遇到问题:启动不了tesseract中的tessdata包

解决方案:

   打开pytesseract.py,修改其中的tessdata_cmd路径为安装路径,

   tessdata_cmd==‘..//Tesseract-OCR//tesseract.exe’


你可能感兴趣的:(自动化测试中的验证码识别python代码)