|         在自动化测试或者安全渗透测试中,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 webdriverimport 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工具,识别率更高 
 
 |