初探自动化测试框架(python)第三章——验证码
程序员文章站
2022-07-14 08:34:47
...
验证码识别率随着验证码复杂程度上升而下降,且只能识别字符串类型验证码
STEP1:
1.安装各种包包
pip3 install PIL
pip3 install pytesseract
2.安装Tesseract-OCR
下载地址(64bit):
官方版:https://github.com/tesseract-ocr/tesseract/wiki
非官方版:https://pan.baidu.com/s/18A31xB_tLaRDL3nLhR5oCg
提取码:zpgw
安装的时候然后一路下一步。
3.配置环境变量
- 找到安装目录,将其添加到环境变量中。
- 增加一个TESSDATA_PREFIX变量名,变量值还是我的安装路径F:\Tesseract-OCR\tessdata这是将语言字库文件夹添加到变量中
- 验证
打开命令终端,输入:tesseract -v,可以看到版本信息
用命令tesseract --list-langs来查看Tesseract-OCR支持语言
STEP2:
from PIL import Image
import pytesseract
from config.pathes import IMAGE_PATH, FRAME_PATH
def verifyCode(driver,type,value):
'''
:param driver: 实例化webdriver
:param type: id,class,name,css,xpath...
:param value: 元素
:return: 识别二维码字符串
'''
driver.save_screenshot(IMAGE_PATH) #截取当前网页
location = driver.location(type,value) #获取验证码x,y轴坐标
size = driver.size(type,value) #获取验证码的长宽
coderange = (int(location['x']),int(location['y']),int(location['x']+ size['width']),
int(location['y']+size['height'])) #截取位置坐标
i = Image.open(IMAGE_PATH)
img1 = i.crop(coderange)
img1.save(IMAGE_PATH)
i2 = Image.open(IMAGE_PATH)
imgry = i2.convert('L') #灰度
threshold = 100
table = []
for j in range(256):
if j < threshold:
table.append(0)
else:
table.append(1)
i3 = imgry.point(table, '1')
# sharpness = ImageEnhance.Contrast(i3) # 对比度增强
# i3 = sharpness.enhance(3.0)
i3.save(FRAME_PATH)
i4 = Image.open(FRAME_PATH)
data = i4.getdata()#去掉多余的黑点
w, h = i4.size
black_point = 0
for x in range(1, w - 1):
for y in range(1, h - 1):
mid_pixel = data[w * y + x]
if mid_pixel < 50:
top_pixel = data[w * (y - 1) + x]
left_pixel = data[w * y + (x - 1)]
down_pixel = data[w * (y + 1) + x]
right_pixel = data[w * y + (x + 1)]
# 判断上下左右的黑色像素点总个数
if top_pixel < 10:
black_point += 1
if left_pixel < 10:
black_point += 1
if down_pixel < 10:
black_point += 1
if right_pixel < 10:
black_point += 1
if black_point < 1:
i4.putpixel((x, y), 255)
black_point = 0
for x in range(1, w - 1):#去子上的白点
for y in range(1, h - 1):
if x < 2 or y < 2:
i4.putpixel((x - 1, y - 1), 255)
if x > w - 3 or y > h - 3:
i4.putpixel((x + 1, y + 1), 255)
i4.save(FRAME_PATH)
i5 = Image.open(FRAME_PATH)
text = pytesseract.image_to_string(i5).strip() #识别验证码
return text
下一篇: 第十章
推荐阅读
-
python 配置web自动化测试框架 selenium
-
小白学 Python 爬虫:自动化测试框架 Selenium 从入门到实战
-
Python Selenium框架设计使自动化测试报告的生成
-
python 配置web自动化测试框架 selenium
-
Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构
-
Python http接口自动化测试框架实现方法示例
-
用Python 写一个用于芯片自动化测试的管理小框架
-
实现一个Python+Selenium的自动化测试框架
-
实现一个Python+Selenium的自动化测试框架就这么简单!
-
初探自动化测试框架(python)第五章——邮件