在自动化测试或者安全渗透测试中,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识别解决方案参考...相关推荐

  1. python写web自动化_使用Python+selenium实现第一个自动化测试脚本

    原标题:使用Python+selenium实现第一个自动化测试脚本 最近在学web自动化,记录一下学习过程. 此处我选用python3.6+selenium3.0,均用最新版本,以适应未来需求. 环境 ...

  2. Python + Selenium(九)- 解决图片验证码登录或注册问题

    1. 解决思路 首先要获得这张验证码的图片,但是该图片一般都是用的js写的,不能够通过url进行下载. 解决方案:截图然后根据该图片的定位和长高,使用工具进行裁剪 裁剪完毕之后,使用工具解析该图片. ...

  3. python + Selenium 自动化实现读取网易邮箱验证码

    前面写到了一些关于python+Selenium的基础操作 的教程,这篇文章将讲解一些实战内容. 在自动化工作中,有可能会遇到一些发送邮箱验证码类似的功能,如下 我们一般的解决思路就是 : 发送邮件- ...

  4. Python+Selenium简单实现Web自动化测试

    这篇文章是入门级别的应用Python + Selenium进行自动化测试,包括环境搭建及简单的实例.基本思想是用Firefox Selenium IDE插件录制脚本并生成Python代码,用Pytho ...

  5. python百度云ocr文字识别软件_基于百度云的OCR识别(Python)

    2019年7月3日早上,在百度AI开发者大会上,一个来自山西的青年,将一瓶矿泉水浇在了同样来自山西的李彦宏身上. 可以回顾一下 https://b23.tv/av57665929/p1 ,着实让人一惊 ...

  6. OpenCV计算机视觉实战(Python)| 10、项目实战:文档扫描OCR识别

    文章目录 简介 总结 1. 介绍 2. 流程 3. 程序 4. 知识点总结 简介 本节为<OpenCV计算机视觉实战(Python)>版第10讲,项目实战:文档扫描OCR识别,的总结. 总 ...

  7. Python+Selenium+PO模型实现自动化测试

    一. PO模型介绍 在自动化中,Selenium自动化测试中有一个名字经常被提及PageObject(思想与面向对象的特征相 同),通常PO模型可以大大提高测试用例的维护效率 PO模型又叫PO设计模式 ...

  8. Python+Selenium PO模式Web自动化测试实战

    1.项目结构 2.BASE层封装代码 # -- coding: UTF-8 -- import datetime import os from selenium.webdriver.support.s ...

  9. python+selenium+EcShop 学习UI自动化测试和感受自动化测试的魅力(UI自动化)

    哈喽!小伙伴们好,你们的朋友像疯一样!又来了,这次分享的是学习UI自动化测试环境和让小伙伴们感受到自动化测试的魅力,实现计算机控制网站.学习路上虽有困难,但是我们一起向前,加油!与前一期一样,文末会有 ...

最新文章

  1. 宁波工程学院2020新生校赛(重现赛)部分题解
  2. 全民大数据时代已来 阿里数加平台详解
  3. excel中如何筛选重复数据
  4. 【科普】什么是Docker?看这一篇干货文章就够了!
  5. postgres 判断null_PostgreSQL NULLIF()用法及代码示例
  6. 根据压缩后的行列数和sourcemap反向定位源码
  7. Windows RDP远程桌面无密码账户
  8. winform 调用外部程序和多线程
  9. 不可见的unicode字符
  10. 工业基础类IFC—总体架构和空间结构
  11. 关于visio安装时出现出现回滚更改以至于安装失败的解决办法
  12. oracle12突然出现ora12514,【ORACLE】提示ORA-12514错误处理
  13. stm32-W5500-官网教程
  14. 计算广告——读书笔记(一)
  15. 简单几步实现Ubuntu22.04启用Nvidia显卡
  16. Redis原理以及底层数据结构初探
  17. 对Dilated Convolution理解
  18. MyBatisPlus 学习笔记_MP的AR模式
  19. iOS开发最新最全微信第三方登录接入流程
  20. 安卓实训运动健身系统_武汉一高校现高颜值网红健身打卡地

热门文章

  1. Git的下载安装(2020)Windows10 Git-2.26.0-64-bit
  2. 基于 mini2440 电阻式触摸屏:电阻式触摸屏工作原理
  3. 学习笔记(13):英特尔®OpenVINO™工具套件中级课程-推理引擎详解内部API
  4. java1.8安装_2020JDK1.8安装教程详解(一次就可安装成功)
  5. 架构17 社交软件红包技术10
  6. 通过analyzer分析dart代码
  7. 稳定wow60级服务器,魔兽世界:永久60级与TBC该怎么选,60级服务器真的会有玩家么?...
  8. ettercap主机指纹识别原理
  9. openwrt x86 登录不上_OpenWrt X86 安装教程
  10. java计算机毕业设计紫陶文化传播与学习交流网站源码+mysql数据库+系统+lw文档+部署