200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python selenium 验证码识别_Pythonseleniumtesseract自动化测试随机码 验证码(Ca

python selenium 验证码识别_Pythonseleniumtesseract自动化测试随机码 验证码(Ca

时间:2019-04-12 16:31:12

相关推荐

python selenium 验证码识别_Pythonseleniumtesseract自动化测试随机码 验证码(Ca

在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位。

我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片处理包即可,对于复杂的识别率要求非常高的,可以考虑百度等公司的OCR有偿服务(当然注册后好像每天可以免费试用上百次,普通测试够用了)。

本人环境: win10,python3.x,pip(python3安装版会自带), pycharm, tesseract-ocr-setup-3.02.02.exe,

pytesser3 ,pytesseract ,selenium(chrome浏览器以及匹配版本的浏览器驱动geckodriver.exe),pillow 5.3,pillow-PIL 0.1

注意事项:

A.务必单独下载安装tesseract-ocr-setup-3.02.02.exe(会自动配置好PATH环境变量),安装好后可以运行DOS命令执行

tesseract G:\temp\captcha\image_code.png g:\temp\abc_123 digits_numbers

tesseract 要识别的图片 识别出来后字符的保存文件,默认为.txt , tesseract安装后Tesseract-OCR\tessdata\configs\路径有个digits文件,可以定义识别白名单,比如只识别数字等,使用后可以提高识别率,可以在原来文件直接改,我这里是复制后修改并且重新命名为digits_numbers,如果不使用白名单命令行可以不加digits_numbers

B.在pytesser3目录下的__init__.py文件里,要修改好以下这行,主要是配置好tesseract.exe的安装路径,注意.exe不需要写

#请务必修改下面的tesseract的name 换成你安装的ocr路径,谢谢!

tesseract_exe_name = 'D:\\programs\\Tesseract-OCR\\tesseract' # Name of

#tesseract_exe_name = 'c:\\Program Files (x86)\\Tesseract-OCR\\tesseract'

以下是pycharm下的工程包和OCR核心源码,至于后续识别后如何登陆就是普通的接口测试或者selenium等UI自动化范畴了,此处省略一万字。如果连UI自动化都不精,不建议直接做这个,赶快回家看书去。

from selenium import webdriver

import pytesser3

import os

import sys, time

from PIL import Image, ImageEnhance

url = "http://登陆的URL"

driver = webdriver.Chrome()

time.sleep(2)

driver.get(url)

time.sleep(5)

try:

account = driver.find_element_by_id('_account')

password = driver.find_element_by_id('_password')

region = driver.find_element_by_id('_regionId')

captcha = driver.find_element_by_id('_captcha')

except:

print("查找元素出现异常")

# 网页截图 + 验证码截图

try:

driver.get_screenshot_as_file('G:\\temp\\page\\loginPage1.png') # 比较好理解

im = Image.open('G:\\temp\\page\\loginPage1.png')

box = (884, 684, 1024, 734) # 设置要裁剪的区域,这个坐标是验证码图片这个长方形的左上角坐标和右下角坐标,不懂可以问UI美工,用图形编辑工具很容易获得

region = im.crop(box) # 此时,region是一个新的图像对象。

region.save("G:\\temp\\captcha\\image_code.png")

except:

print("网页截图 + 验证码截图出现异常")

driver.close()

# --------------------图片增强+自动识别简单验证码-----------------------------

# 防止图片还没保存好,就开始识别

time.sleep(3)

im = Image.open("G:\\temp\\captcha\\image_code.png")

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

sharpness = ImageEnhance.Contrast(imgry) # 对比度增强

sharp_img = sharpness.enhance(2.0)

sharp_img.save("G:\\temp\\captcha\\image_code.png")

time.sleep(2)

def image_file_to_string(file):

cwd = os.getcwd()

try:

os.chdir("D:\\programs\\Tesseract-OCR")

return pytesser3.image_file_to_string(file)

finally:

os.chdir(cwd)

# code即为识别出的图片数字str类型

code = image_file_to_string("G:\\temp\\captcha\\image_code.png")

time.sleep(1)

print(code)

后续省略一万字,自己用次code去完成接下来的自动化登陆即可....

有些复杂点的图片验证码识别率不高,是的,一开始我就说了,

改进参考:

1. 真正应用的时候可以考虑把打开浏览器,截图等事情换个实现方式,使用内核浏览器操作,而非真正打开可见的浏览器,这样更快。

2. OCR识别部分还需要用你要实现产品的验证码样本进行tesseract的进一步学习训练,或者换用商用OCR工具,识别率更高

python selenium 验证码识别_Pythonseleniumtesseract自动化测试随机码 验证码(Captcha)的OCR识别解决方案参考...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。