Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考
在自动化测试或者安全渗透测试中,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&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考的更多相关文章
- python+selenium,实现带有验证码的自动化登录功能
python+selenium的环境准备,请自行安装完成,这里直接贴代码,方便做项目时直接使用. import time from selenium import webdriver from PIL ...
- Python+Selenium学习--自动化测试模型
前言 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块.自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试.数据驱动测试.对 ...
- Python爬虫入门教程 58-100 python爬虫高级技术之验证码篇4-极验证识别技术之一
目录 验证码类型 官网最新效果 找个用极验证的网站 拼接验证码图片 编写自动化代码 核心run方法 模拟拖动方法 图片处理方法 初步运行结果 拼接图 图片存储到本地 @ 验证码类型 今天要搞定的验证码 ...
- Python+Selenium UI自动化测试环境搭建及使用
一什么是Selenium ? Selenium 是一个浏览器自动化测试框架,它主要用于web应用程序的自动化测试,其主要特点如下:开源.免费:多平台.浏览器.多语言支持:对web页面有良好的支持:AP ...
- 配置Python+selenium+firefox自动化测试
1.安装python.默认安装 2.安装pip.下载pip-1.5.4包,解压pip-1.5.4,放在C盘,进入pip目录-->键入命令:python setup.py install 再进入 ...
- python selenium web自动化测试完整项目实例
问题: 好多想不到的地方,中间经历了一次重构,好蛋疼: xpath定位使用的不够熟练,好多定位问题,只能靠强制等待解决: 存在功能重复的方法,因为xpath定位不同,只能分开写,有时间可以继续优化: ...
- python selenium+phantomJS自动化测试环境
0x00配置phantomJS 1. 在windows平台下 此种方法是弹浏览器进行自动化测试的. 1.下载谷歌的驱动 https://chromedriver.storage.googleapis. ...
- python + selenium webdriver 自动化测试 之 环境异常处理 (持续更新)
1.webdriver版本与浏览器版本不匹配,在执行的时候会抛出如下错误提示 selenium.common.exceptions.WebDriverException: Message: unkno ...
- python + selenium + unittest 自动化测试框架 -- 入门篇
. 预置条件: 1. python已安装 2. pycharm已安装 3. selenium已安装 4. chrome.driver 驱动已下载 二.工程建立 1. New Project:建立自己的 ...
随机推荐
- 3.numpy_array数组
官方文档:www.numpy.org.cn Numpy 数组及其索引 先导入numpy: from numpy import * 产生数组 从列表产生数组: lst = [0, 1, 2, 3] a ...
- python记录_day17 类与类之间的关系
一.依赖关系 a类的对象是b类方法的参数 这种关系是我用着你,但你不属于我,比如公司和临时工的关系,是很弱的一种关系 class Zhiwu: def __init__(self,name,atk): ...
- HDU - 4436sam裸题
题意:给你多个数字串,求本质不同的子串和(去掉前导零) 题解:建广义sam,刚开始一直想的是用l来计算,发现前导零对l的影响根本消不掉,所以不会做= =,原来应该是直接用一个新的数组表示到当前有多少个 ...
- TCP如何保证可靠性
如何保证可靠性? 1.校验和.在TCP的首部中有一个占据16为的空间用来放置校验和的结果. 这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化.如果收到段的检验和有差错,TCP将丢弃这个报文 ...
- 1.Liunx 文件管理
文件管理命令 1.基本命令:ls .cd .pwd .man 2.文件操作:touch . cp . rm . mv .ln . mkdir . rmdir 3.文件查看:cat .more .les ...
- pycham相关+Python基础
pycham 1.设置pycham和线上服务器同步代码 a.Tools--->Deployment--->Configuration b.设置连接的服务器IP c.设置连接的用户名+密 ...
- [LeetCode] 110. Balanced Binary Tree ☆(二叉树是否平衡)
Balanced Binary Tree [数据结构和算法]全面剖析树的各类遍历方法 描述 解析 递归分别判断每个节点的左右子树 该题是Easy的原因是该题可以很容易的想到时间复杂度为O(n^2)的方 ...
- vue2.0 transition 手风琴
<div class="food"> <button @click="show=!show">show</button> & ...
- jetty隐藏版本号教程
一.查看版本号 直接访问端口不像apache/tomcat/nginx会直接有版本号 但实际查看返回http头时还是带着版本号 二.隐藏版本号操作 编缉$JETTY_HOME/start.ini将je ...
- WebSphere部署应用教程
在WebSphere中应用是部署在“应用程序服务器”,而“应用程序服务器”建立在“节点”上 所以部署应用的几个前提是:要创立好受控server(亦即节点)并加入到控制台中且处于启动(亦即同步)状态:要 ...