让测试人头疼的web自动化之验证码识别彻底解决方案

这篇具有很好参考价值的文章主要介绍了让测试人头疼的web自动化之验证码识别彻底解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

验证码识别解决方案

对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动验证的。诸如此类的验证码,对我们的系统增加了安全性的保障,但是对于我们测试人员来讲,在自动化测试的过程中,无疑是一个棘手的问题。

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

1、web自动化验证码解决方案

一般在我们测试过程中,登录遇到上述的验证码的时候,有以下种解决方案:

  • 第一种、让开发去掉验证码
  • 第二种、设置一个万能的验证码
  • 第三种、通过cookie绕过登录
  • 第四种、自动识别技术识别验证码

2、自动识别技术识别验证码

前三种解决方案,想必大家都比较了解,本文重点阐述第四种解决方案,也就是验证码的自动识别,关于验证码识别这一块,可以通过两个方案来解决,

  • 第一种是:OCR自动识别技术,
  • 第二种是:通过第三方打码平台的接口来识别。

OCR识别技术

OCR中文名称光学识别, tesseract是一个有名的开源OCR识别框架,它与Leptonica图片处理库结合,可以读取各种格式的图像并将它们转化成超过60种语言的文本,可以不断训练自己的识别库,使图像转换文本的能力不断增强。如果团队深度需要,还可以以它为模板,开发出符合自身需求的OCR引擎。那么接下来给大家介绍一下如何使用tessract来识别我们的验证码。

关于OCR自动识别这一块,需要大家安装Tesseract,并配置好环境,步骤如下

1)、安装tesseract

适用于Tesseract 3.05-02和Tesseract 4.00-beta的

Windows安装程序下载地址:https://github.com/UB-Mannheim/tesseract/wik。

2)、加入培训数据

tesseract 默认只能识别英文,如果您想要识别其他语言,则需要下载相应的培训数据

下载地址:https://github.com/tesseract-ocr/tesseract/wiki/Data-Files,

  • 下图为中文数据包

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

我们只做中文,暂时下载一个中文的文字训练数据就可以 ,然后将.traineddata文件复制到安装之后的'tessdata'目录中。C:\OCR\Tesseract-OCR\tessdata

3)、配置环境变量

要从任何位置访问tesseract-OCR,您可能必须将tesseract-OCR二进制文件所在的目录添加到Path变量中C:\OCR\Tesseract-OCR

  • 安装后tesseract之后 ,并不能直接在python中使用,我们要想在python中使用,需要安装pytesseract模块我们可以通过 pip 安装

pip install pytesseract

  • python中识别验证码图片内容

安装好后。找一张验证码图片,如下图(命名为test.jpg),放在当前python文件同级目录下面,

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

使用 PIL中的Image中的open方法打开验证码图片,调用pytesseract.image_to_string方法,可以识别图片中的文字,并且转换成字符串,如下面代码所示。

import pytesseract
from PIL import Image
pic = Image.open('test.jpg')
# pic 为打开的图片,lang指定识别转换的语言库
text = pytesseract.image_to_string(pic,lang='chi_sim')
print(text)

通过上述方法能识别简单的验证码,但是存在一定的问题,识别的精度不高,对于一些复杂一点,有干扰线的验证码无法正确识别出结果。

接下来给大家介绍一下第二种识别的方案,第三方的打码平台识别

  • 打码平台识别验证码

第三方的打码平台相对于OCR来讲,优势在于识别的精准度高,网络上的第三方打码平台很多,百度随便一搜就有几十个,这个给大家列举几个,如下所示:

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

网络上的第三方打码平台众多,这里小编选择超级鹰这个第三方的平台来给大家做演示。

首先登录我们需要注册登录超级鹰这个网站 www.chaojiying.com,进入之后我们找到python对应的开发文档并下载,

  • 下载开发文档

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

  • 下载之后解压缩,得到如下文件

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

  • 第三方打码平台的接口分析

    我们打开chaojiying.py这个文件后,会发现这个文件中给出了的接口非常简单,如下所示

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

首先第一步创建一个用户对象:三个参数(账号,密码,软件ID),账号密码就是该网站的账号密码,那么软件ID呢?软件ID我们可以在用户中心找到软件ID,然后进去点击生成一个软件ID(如下图),

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

第二行代码就是打开一个要识别的验证码图片,并读取内容,

第三行,调用PostPic方法识别验证码,两个参数(验证码图片内容,验证码类型),关于验证码类型,请参考该网站的价格体系(如下图),根据验证码类型选择对应的数值传入。

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

结果提取:

PostPic返回的是一个字典类型的数据,识别的验证码在该字典中的pic_str这个键中

res = cjy.PostPic(im, 1902)  # 1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()
data = res['pic_str'] 
print(data)

第三方接口给大家介绍到这里,接下来我们实际应用到登录中去。

提示:打码平台一般都是收费的(差不多是一分钱,识别一次)

3、自动识别验证码登录案例

  • 登录案例

    接下来以超级鹰这个网站为列,使用web自动化测试框架selenium来实现验证码识别自动登录,

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

  • 需要用到的库有selenium、pillow、time,和我们上面下载的超级鹰的接口文件

  • 环境安装

    • 1、selenium安装

      pip install selenium
    • 2、chromedriver 安装

      # 下载地址 http://chromedriver.storage.googleapis.com/index.html
      • 下载和自己chrome浏览器对应的chromedriver版本,

      • 配置环境变量

    • 3、pillow模块安装(处理图像的库)

      pip install pillow
  • 实现步骤分析

  • 1、获取账号密码输入框:输入账号密码

  • 2、获取验证码图片

    • 将当前页面截图
    • 选择图片元素,获取上下左右位置
    • 使用PIL模块对页面图片进行再次截图(获取验证码图片)
    • 将验证码图片保存
  • 3、调用第三方接口识别验证码

  • 4、输入验证码结果

  • 5、点击登录

  • 具体代码实现

  • 具体代码实现

  • 1、selenium打开登录页面

import time
from selenium import webdriver
from PIL import Image
from chaojiying import Chaojiying_Client

# 创建一个浏览器
browser = webdriver.Chrome()
# 访问登录页面
url = 'http://www.chaojiying.com/user/mysoft/'
browser.get(url)
time.sleep(1)  # 暂停一秒钟

 2、获取账号密码输入框:输入账号密码

# 选择账号、密码输入栏,输入对应的账号密码
input_user=browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input')
# 输入账号
input_user.send_keys('账号')
input_pwd=browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input')
# 输入密码
input_pwd.send_keys('密码')
  • 2、获取验证码图片

    • 将当前页面截图

      # 对当前页面进行截图
      browser.save_screenshot('login.png')
    • 选择图片元素,获取上下左右位置

# 选择验证码图片的元素
yzm_btn = browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/div/img')
# 获取图片元素的位置
loc = yzm_btn.location
# 获取图片的宽高
size = yzm_btn.size
      • 获取验证码上下左右的位置,此处要注意查看电脑显示的缩放比列(如下图),根据比列乘以相应的系数,我这边的显示比列是125,那么对于的系数就是1.25(如果你的是150,那么就乘以1.5)

      left = loc['x']*1.25  # 计算左边界
      top = loc['y']*1.25   # 计算上边界
      right = (loc['x'] + size['width'])*1.25     # 计算右边界
      botom = (loc['y'] + size['height'])*1.25    # 计算下边界
      # 将上下左右边界值放到元祖中(注意顺序:左 上 右  下)
      local = (left, top, right, botom)

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

  • 使用PIL模块对页面图片进行再次截图(获取验证码图片),将验证码图片保存

    pic = PIL.Image.open('file')
    pic.crop(local)
    pic.sava('zym,png')
    
  • 3、调用第三方接口识别验证码

    # 识别验证码
    cjy = Chaojiying_Client('账号', '密码', '软件ID')  # 用户中心>>软件ID 生成一个
    im = open('yzm.png', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    res = cjy.PostPic(im, 1902)  # 1902 验证码类型  
    data = res['pic_str']
    print(data)
  • 4、输入验证码结果

    # 在输入框输入验证码
    yzm_input = browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input')
    yzm_input.send_keys(data)
  • 5、点击登录

    # 点击登录
    submit = browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input')
    submit.click()
    

完整代码如下(账号密码自行修改):

import time
from selenium import webdriver
from PIL import Image
from chaojiying import Chaojiying_Client

# 创建一个浏览器
browser = webdriver.Chrome()
# 访问登录页面
url = 'http://www.chaojiying.com/user/mysoft/'
browser.get(url)
time.sleep(1)  # 暂停一秒钟
# 选择账号、密码输入栏,输入对应的账号密码
input_user = browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input')
input_user.send_keys('账号')
input_pwd = browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input')
input_pwd.send_keys('密码')
# 获取验证码的图片,并进行识别,将识别的结果,输入到验证码输入框中
# 对当前页面进行截图
browser.save_screenshot('login.png')
# 选择验证码图片的元素
yzm_btn = browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/div/img')
# 获取图片元素的位置
loc = yzm_btn.location
# 获取图片的宽高
size = yzm_btn.size
# 获取验证码上下左右的位置
left = loc['x']*1.25
top = loc['y']*1.25
right = (loc['x'] + size['width'])*1.25
botom = (loc['y'] + size['height'])*1.25
val = (left, top, right, botom)
# 打开网页截图
login_pic = Image.open('login.png')
# 通过上下左右的值,去截取验证码
yzm_pic = login_pic.crop(val)
yzm_pic.save('yzm.png')

# 识别验证码
cjy = Chaojiying_Client('账号', '密码', '软件ID')  # 用户中心>>软件ID 生成一个替换 96001
im = open('yzm.png', 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
res = cjy.PostPic(im, 1902)  # 1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()
data = res['pic_str']
print(data)

# 在输入框输入验证码
yzm_input = browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input')
yzm_input.send_keys(data)


# 点击登录
submit = browser.find_element_by_xpath('/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input')
submit.click()

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!
web自动化注册手机短信验证码怎么处理,自动化测试工具,自动化,web自动化测试,selenium自动化测试文章来源地址https://www.toymoban.com/news/detail-795810.html

到了这里,关于让测试人头疼的web自动化之验证码识别彻底解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium--自动化识别图片验证码并输入

    首先注册百度智能云账号(这里我用的是百度智能云):    1.要在这里面保存好API Key 和 Secret Key  2.然后进入查看文档   在pycharm中: 导入自动化文件: 在写自动化脚本时调用封装的百度类: 注意:自动化识别文字可能会出现识别不出来的可能,要解决这个Bug。 代码分享:

    2024年02月11日
    浏览(51)
  • 自动化测试 - Web自动化测试原理

    目前市面上有很多Web UI自动化测试框架,比如WatiN, Selinimu,WebDriver,还有VS2010中的Coded UI等等. 这些框架都可以操作Web中的控件,模拟用户输入,点击等操作,实现Web自动化测试。其实这些工具的原理都一样,都是通过调用IE COM接口和HTML DOM 对IE浏览器以及WEB测试对象的操作。

    2024年01月16日
    浏览(46)
  • Web自动化测试简介及web自动化测试实战交教程

    1.什么是自动化测试? 自动化测试的概念: 软件自动化测试就是通过测试工具或者其他手段,按照测试人员的预定计划对软件产品进行自动化测试,他是软件测试的一个重要组成部分,能够完成许多手工测试无法完成或者难以实现的测试工作,正确合理的实施自动化测试,能

    2024年02月08日
    浏览(55)
  • Web自动化测试怎么做?Web自动化测试的详细流程和步骤

    自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人的直接参与下,按照人的要求,经过自动检测、信息处理、分析判断、操纵控制,实现预期的目标的过程。 这是教科书里面的自动化的定义,回归到自动化测试其实自动化测试就是什么呢?

    2024年02月02日
    浏览(45)
  • 使用自动化测试获取手机短信验证码

    目前在职测试开发,,写一些脚本,个人认为这职业不科学不应该有的职业,测试就是测试,开发就是开发,运维还是老鸟,这行业总能折腾些莫名其妙的东西出来,刚做这行时学的第一门语言是bash shell, 去新去单位上班直接写了个一键搭建测试环境的测试脚本,本来不想干测试了,好好做

    2024年01月21日
    浏览(50)
  • web自动化测试进阶篇03 ———自动化并发测试应用

        😏 作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡 主页地址:【Austin_zhai】 🙆 目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。 💎 声明:博主日常工作较为繁忙,文章会不定期更新,各类行业或职场问

    2024年02月06日
    浏览(50)
  • 【Web UI自动化测试】Web UI自动化测试之框架篇(全网最全)

    本文大纲截图: UnitTest框架: PyTest框架: 框架: 框架英文单词 framework,为解决一类事情的功能的集合。需要按照框架的规定(套路)去书写代码。 概念:UnitTest是python自带的一个单元测试框架,用它来做单元测试 自带的框架:不需要单独按照,只要安装了 python就可以用

    2023年04月09日
    浏览(58)
  • Selenium+Python自动化测试之验证码处理

    验证码识别技术 (很难达到100%) 添加Cookie (*****五星推荐) 逻辑方式: 1:打开验证码所在页面,截图。获取验证码元素坐标,剪切出验证码图片,识别 以途牛为例 代码: 步骤: 1:获取指定cookie: get_cookie(cookie名) 2:获取本网站所有本地cookies: get_cookies() 3:添加cookie:ad

    2024年02月04日
    浏览(44)
  • 【Web UI自动化测试】Web UI自动化测试之日志收集篇(全网最全)

    本文大纲截图:   日志: 用于记录系统运行时的信息,对一个事件的记录,也称为 Log 。 日志作用: 1)调试程序 2)了解系统程序运行的情况是否正常 3)系统程序运行故障分析与问题定位 4)用来做用户行为分析和数据统计 日志级别: 日志级别:指日志信息的优先级、重

    2024年02月12日
    浏览(46)
  • 自动化测试之web自动化(Selenium)

     🔥 交流讨论: 欢迎加入我们一起学习! 🔥 资源分享 : 耗时200+小时精选的「软件测试」资料包 🔥  教程推荐: 火遍全网的《软件测试》教程   📢 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! yycnblog 自动化测试概念:让程序代替人为去验证程序功能的过程,本

    2024年03月15日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包