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

2023-05-16

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




转载于:https://www.cnblogs.com/sea520/p/10030317.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考... 的相关文章

  • 通过 add_subplot 添加子图后如何共享轴?

    我有一个像这样的数据框 df pd DataFrame A 0 3 0 2 0 5 0 2 B 0 1 0 0 0 3 0 1 C 0 2 0 5 0 0 0 7 D 0 6 0 3 0 4 0 6 index list abcd A B
  • 动态向类添加类方法

    我有以下片段 FEED TYPES fan mail Fan Mail review Review tip Tip fan user Fan User fan song Fan Song fan album Fan Album played
  • sklearn 估计器管道的参数无效

    我正在实现 O Reilly 书中的一个示例 Python 机器学习简介 使用 Python 2 7 和 sklearn 0 16 我正在使用的代码 pipe make pipeline TfidfVectorizer LogisticRe
  • 将 JSON 发布到 Python CGI

    我已经安装了 Apache2 并且 Python 可以工作 但我有一个问题 我有两页 一个是 Python 页面 另一个是带有 JQuery 的 Html 页面 有人可以告诉我如何让我的 ajax 帖子正常工作吗
  • Python 转换矩阵

    我有一个如下所示的列表 2 1 3 1 2 3 1 2 2 2 我想要的是一个转换矩阵 它向我显示如下序列 1 后跟 1 的频率是多少 1 后面跟着 2 的频率是多少 1 后跟 3 的频率是多少 2 后跟 1 的频率是多少 2 后跟 2 的
  • 如何使用一个模型中间层的输出作为另一个模型的输入?

    我训练一个模型A并尝试使用中间层的输出name layer x 作为模型的附加输入B 我尝试像 Keras 文档一样使用中间层的输出https keras io getting started faq how can i obtain th
  • 键入的完整命令行

    我想获得输入时的完整命令行 This join sys argv 在这里不起作用 删除双引号 另外 我不想重新加入已解析和拆分的内容 有任何想法吗 你太迟了 当键入的命令到达 Python 时 您的 shell 已经发挥了它的魔力 例如 引
  • Keras model.predict 函数给出输入形状错误

    我已经在 Tensorflow 中实现了通用句子编码器 现在我正在尝试预测句子的类概率 我也将字符串转换为数组 Code if model model type universal classifier basic class probs
  • 类型错误:“datetime.datetime”和“str”的实例之间不支持“>”

    我是 python 日期和时间类型的新手 我有一个日期值 date 2018 11 10 10 55 31 00 00 我需要检查该日期值是否超过 90 天 我试过 from datetime import datetime from da
  • 如何在Windows中的Python 3.9下pip安装pickle?

    我需要pickle https docs python org 3 9 library pickle html module pickle包安装在我的下面Python 3 9在 Windows 10 下 我尝试过的 当尝试与pip inst
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • 使用pathlib获取主目录

    翻看新的pathlib在 Python 3 4 中 我注意到没有任何简单的方法来获取用户的主目录 我能想到的获取用户主目录的唯一方法是使用旧的os path像这样的库 import pathlib from os import path p
  • 查找与另一列 Pandas 中的唯一值关联的列中的值的交集

    如果我有一个像这样的数据框 非常小的例子 col1 col2 0 a 1 1 a 2 2 b 1 3 b 2 4 b 4 5 c 1 6 c 2 7 c 3 我想要所有的交集col2当价值观与其独特性相关时col1值 因此在这种情况下 交集
  • Py2exe - Pmw WindowsError:[错误 3]

    我正在尝试使用 Py2exe 构建独立的可执行文件 我已经导入了 Pmw 类 当我运行独立可执行文件时 出现以下错误 Traceback most recent call last File py line 9 in
  • 是否可以在Python中将日+月(不是年)与当前日+月进行比较?

    我正在获取 5 月 10 日 格式的数据 我试图弄清楚它是今年还是明年 该日期仅一年 因此 5 月 10 日表示 2015 年 5 月 10 日 而 5 月 20 日表示 2014 年 5 月 20 日 为此 我想将字符串转换为日期格式并进
  • 如何创建用于霍夫曼编码和解码的树?

    对于我的作业 我将对霍夫曼树进行编码和解码 我在创建树时遇到问题 并且陷入困境 不要介意打印语句 它们只是让我测试并查看函数运行时的输出是什么 对于第一个 for 循环 我从主块中用于测试的文本文件中获取了所有值和索引 在第二个 for 循
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • 基于值的 matplotlib 条形图颜色

    有没有一种方法可以根据条形图的值对条形图的条形进行着色 例如 values below 0 5 red values between 0 5 to 0 green values between 0 to 08 blue etc 我找到了一些
  • 在Python中停止ThreadPool中的进程

    我一直在尝试为控制某些硬件的库编写一个交互式包装器 用于 ipython 有些调用对 IO 的影响很大 因此并行执行任务是有意义的 使用 ThreadPool 几乎 效果很好 from multiprocessing pool import

随机推荐

  • 如何给自己的Python项目制作安装包

    Packaging Python Projects 本教程将指导您如何打包一个简单的Python项目 它将向您展示如何添加必要的文件和结构来创建包 xff0c 如何构建包以及如何将其上载到Python包索引 A simple project
  • linux安装解压工具gzip,笔记6 压缩工具(gzip,bzip2,xz,zip,tar)。

    压缩打包 常见的压缩文件 windows rar zip 7z Linux zip gz bz2 xz tar gz tar bz2 tar xz gzip压缩工具 不能压缩目录 gzip压缩后边直接跟文件名就可以 xff0c gunzip
  • 洛谷 P3367 【模板】并查集

    P3367 模板 并查集 题目描述 如题 xff0c 现在有一个并查集 xff0c 你需要完成合并和查询操作 输入输出格式 输入格式 xff1a 第一行包含两个整数N M xff0c 表示共有N个元素和M个操作 接下来M行 xff0c 每行
  • js计算器(正则)

    lt doctype html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt 我的计算器 lt title gt lt style gt mar
  • MySQL 分组后取每组前N条数据

    与oracle的 rownumber over partition by xxx order by xxx 语句类似 xff0c 即 xff1a 对表分组后排序 创建测试emp表 DROP TABLE IF EXISTS emp CREAT
  • archlinux 安装搜狗输入法

    安装可能需要 archlinuxcn 的源 xff0c 我这里已经配置好了 一 安装 fcitx fcitx configtool fcitx im pacman S fcitx fcitx configtool fcitx im 二 在
  • MongoDB——JavaAPI详解

    环境配置 引入MongoDB驱动 xff1a span class token tag span class token tag span class token punctuation lt span dependency span sp
  • 练习题||并发编程

    线程 进程 队列 IO多路模型 操作系统工作原理介绍 线程 进程演化史 特点 区别 互斥锁 信号 事件 join GIL 进程间通信 管道 队列 生产者消息者模型 异步模型 IO多路复用模型 select poll epoll 高性能IO模
  • luogu P2078 朋友

    题目背景 小明在A公司工作 xff0c 小红在B公司工作 题目描述 这两个公司的员工有一个特点 xff1a 一个公司的员工都是同性 A公司有N名员工 xff0c 其中有P对朋友关系 B公司有M名员工 xff0c 其中有Q对朋友关系 朋友的朋
  • Debian 9 Stretch国内常用镜像源

    使用说明 一般情况下 xff0c 修改 etc apt sources list文件 xff0c 将Debian的默认源地址改成新的地址即可 xff0c 比如将http deb debian org改成https mirrors xxx c
  • ubuntu下编译ffmpeg并用eclipse调试

    一 下载ffnpeg源码 下载地址 xff1a http ffmpeg org download html 二 解决版本问题 可能之前你编译过ffmpeg xff0c 或者装过相关的库 xff0c 那都要先卸载掉 xff0c 否则用的时候会
  • 定时器初值计算

    1 定时器初值的计算 xff1a xff08 1 xff09 计算出机器周期 每次定时计算器加1所用的时间 xff08 2 xff09 根据你要定时的时间去算出初值 xff1a 假设你要定时Xms xff08 X lt 65 535ms x
  • ceph部署出现错误及解决

    ceph deploy new error hostname node1 is not resolvable 解决办法 xff0c 修改 etc hosts 127 0 0 1 localhost 127 0 1 1 ubuntu1 192
  • WordNet词网研究6——之JWI(Java Wordnet Interface)WordNet Java接口

    JWI the MIT Java Wordnet Interface is a Java library for interfacing with Wordnet JWI supports access to Wordnet version
  • SPI协议及其工作原理详解

    一 概述 SPI Serial Perripheral Interface 串行外围设备接口 是 Motorola 公司推出的一种同步串行接口技术 SPI 总线在物理上是通过接在外围设备微控制器 PICmicro 上面的微处理控制单元 MC
  • 通过修改qt设置,解决LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”

    编译为知笔记源码的时候遇到的第一个错误 LINK fatal error LNK1104 无法打开文件 kernel32 lib 经研究发现是qt使用的本地编译连接工具cl exe找不到 windows sdk的lib文件导致 找到lib文
  • CF1042B 【Vitamins】(去重,状压搜索)

    由题意 我们其实会发现 对于每一种果汁 xff0c 其对应的状态只有可能有7种 VA VB VC VA 43 VB VA 43 VC VB 43 VC VA 43 VB 43 VC 这道题就大大简化了
  • SpringBoot——整合MongoDB详解

    引入依赖 span class token tag span class token tag span class token punctuation lt span dependency span span class token pun
  • 洛谷 P1991 无线通讯网/一本通OJ 1487【例 2】北极通讯网络

    要求用尽可能小的代价使图联通 xff0c 考虑最小生成树 如果不断加边 xff0c 将分散的点连结为 p s 个联通块 xff0c 则 s 个无线电站可以分布在每个联通块中的任意点 而此处要求的半径D是对于所有点的覆盖半径 xff0c 相当
  • Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考...

    在自动化测试或者安全渗透测试中 xff0c Captcha验证码的问题经常困扰我们 xff0c 还好现在OCR和AI逐渐发展起来 xff0c 在这块解决上越来越支撑到位 我推荐的几种方式 xff0c 一种是对于简单的验证码 xff0c 用开