Selenium 自动化测试如何优雅的解决图片验证码问题

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

Selenium 自动化测试如何优雅的解决图片验证码问题

说到自动化测试那一定避不开登陆注册页面,而大多数情况下这两个简单的页面都存在一个小困难就是验证码,以前我的解决办法都是在测试环境粗暴的写死一个万能验证码,或者给程序一个10秒钟的线程阻塞,手动输入验证码以跳过这个步骤。这样就可以不那么优雅的实现的登陆注册自动化测试啦。但是思来想去,既然是自动化测试,那就不应该有手动或者写死代码的魔改方式存在,而是全自动的测试。于是展开一番探索后的我找到了两种方法解决这个问题。

一、cookie方式绕过验证

首先手动登陆一下,然后抓包找到对应的cookie值,复制该值找到和登陆相关的key:value并使用selenium的add_cookie 方法,使用cookie后刷新页面即可跳过登陆验证直接进入系统。或者使用request库中的get_url方法,传入cookie值也可以达到同样的目的。但这样的做法并无法完成对登陆页面的测试,同时当cookie失效或者每次登陆的值都有变化的时候比较恼火,于是就有了第二种方法。

二、图像识别将图片转化为字符串

这两种方法的本质是相同的,都是使用AI的方式,自动识别验证码,完成填入。只不过采用了不同的包和方法完成的。在这儿之前我们先想一下完成验证码的提取应该有哪些步骤?

  • 进入登陆页面并截屏

from selenium import webdriver
​
driver = webdriver.Chrome()
​
driver.get('https://www.LoginPage.com')
​
driver.save_screenshot(file_name)
  • 保存图片至文件夹

一般情况下,我们的项目路径下都会建立一个保存屏幕截图的文件夹,用来保存出现错误后的图片文件,通常使用当时的时间作为文件的名称。

import os
from time import strftime
​
file_name = strftime('%Y%m%d-%H-%M-%S') + '.png'
​
file_path = os.path.abspath('ScreenShot') + '/' + file_name
​
driver.get_screenshot_as_file(file_path)
  • 截图出验证码部分的图片

这里说明一下,我们需要element的左上角坐标和右下角坐标就能完成对验证码部分的截图。element的location方法本质上是使用了getElementRect(),区别是其只返回了x,y坐标而没有width和height的值。

from selenium import webdriver
from selenium.webdriver.common.by import By
from PIL import Image
​
driver = webdriver.Chrome()
​
element = driver.find_element(By.ID, 'xxxx')
​
left_top_corner_index = element.location()
​
left_top_x = left_top_corner_index['x']
​
left_top_y = left_top_corner_index['y']
​
right_down_x = left_top_x + element.size['width']
​
right_down_y = left_top_y + element.size['height']
​
image = Image.open(screenshot_image) 
​
crop_image = Image.crop((left_top_x, left_top_y, right_down_x, right_down_y))
​
crop_image.save(file_path)
  • 将验证码部分的图片中的文字转化为字符串打印出来

import pytesseract
​
image = Image.open(verify_code_image)
​
verify_code_text = pytesseract.image_to_string(image)

selenium如何绕过验证码,python,chrome,开发语言,selenium,测试工具

 pytesseract的AI识别能力较差,只能识别一些简单的验证码,如下图:

selenium如何绕过验证码,python,chrome,开发语言,selenium,测试工具

这种验证码没有太多的额外干扰,但是当遇到干扰线很多甚至动来动去的那种就寄了,所以我们就要找其他第三方库来完成这件事。

import DdddOcr
​
def convert_to_string():
    ocr = DdddOcr()
    with open(r'file_path', 'rb') as f:
        img_bytes = f.read()
    res = ocr.classification(img_bytes)
    return res  

这是一个开源的验证码识别工具,测试下来准确度还说的过去,还可以写一个重试的机制,防止一次识别错误导致登陆失败,可以多尝试一下。接下来就可以愉快进行自动化的登陆啦。

三、讨论:自动化测试要不要包含验证码登陆?

这个问题我有跟其他同事简单的讨论过,一种观点是当AI库的识别能力可以达到一个较高的准确程度的前提下,自动化测试就应该包含验证码登陆,毕竟E2E测试就是应该更加贴近真实的用户操作。另外一种观点是在E2E阶段增加验证码这种不稳定的case在测试中会徒增不必要的麻烦,应该在接口测试和单元测试进行,E2E测试中只需要使用万能验证码或者其他方式跳过验证码的步骤进行登陆测试就可以了。欢迎大家发表自己的观点和看法!文章来源地址https://www.toymoban.com/news/detail-633722.html

到了这里,关于Selenium 自动化测试如何优雅的解决图片验证码问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • selenium 自动化测试:如何搭建自动化测试环境,搭建环境过程应该注意的问题

    最近也有很多人私下问我,selenium学习难吗,基础入门的学习内容很多是3以前的版本资料,对于有基础的人来说,3到4的差别虽然有,但是不足以影响自己,但是对于没有学过的人来说,通过资料再到自己写的代码,发现有些东西没有,有些方法又不相同,导致脚本不能运行

    2024年02月10日
    浏览(53)
  • 如何使用Python自动化测试工具Selenium进行网页自动化?

    Selenium 是一个流行的Web自动化测试框架, 它支持多种编程语言和浏览器,并提供了丰富的API和工具来模拟用户在浏览器中的行为 。 Selenium可以通过代码驱动浏览器自动化测试流程,包括页面导航、元素查找、数据填充、点击操作等。 与PyAutoGUI和AutoIt相比, Selenium更适合于处

    2023年04月09日
    浏览(126)
  • 什么是Selenium?如何使用Selenium进行自动化测试?

      Selenium 是一种开源工具,用于在 Web 浏览器上执行自动化测试(使用任何 Web 浏览器进行 Web 应用程序测试)。   等等,先别激动,让我再次重申一下,Selenium 仅可以测试Web应用程序。我们既不能使用 Selenium 测试任何桌面(软件)应用程序,也不能测试任何移动应用程

    2024年02月02日
    浏览(48)
  • 如何使用自动化测试工具Selenium?

    哈喽,大家好,我是小浪。那么有一段时间没有更新了,还是在忙实习和秋招的事情,那么今天也是实习正式结束啦,开始继续更新我们的学习博客,后期主要是开发和测试的学习博客内容巨多,感兴趣的小伙伴们可以一键三连支持一下欧~ 目录 一、什么是自动化测试? 二、

    2024年02月11日
    浏览(61)
  • Selenium如何用于编写自动化测试脚本?

    Selenium如何用于编写自动化测试脚本?它提供了许多测试工具和API,可以与浏览器交互,模拟用户操作,检查网页的各个方面。下面是一些步骤,可以帮助你编写Selenium自动化测试脚本。 1、安装Selenium库和浏览器驱动程序 首先,你需要安装Selenium库和浏览器驱动程序,例如C

    2024年02月09日
    浏览(41)
  • 拥抱自动化测试,快速升职加薪丄Selenium+Pytest自动化测试框架教你如何做到

    引言 Selenium+Pytest自动化测试框架是目前最流行的自动化测试工具之一,其强大的功能和易用性援助许多开发人员和测试人员。 selenium自动化+ pytest测试框架禅道实战 选用的测试网址为我电脑本地搭建的禅道 conftest.py更改 config.ini更改 conf.py更改 page更改 page_element更改 page_obje

    2023年04月24日
    浏览(76)
  • Selenium自动化测试框架常见异常分析及解决方法

    现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, 解决方法:重命名这个文件 1)未找到响应的浏览器驱动 WebDriv

    2024年02月06日
    浏览(42)
  • 干货整理,Selenium 自动化测试常见异常问题 +解决方法(详细)

    异常1:Stale Element Reference Exception 直译异常 Stale Element Reference Exception:陈旧元素引用异常 首先,啥情况下会出现这异常 简单来说就是,页面元素过期了,无法引用元素 出现这异常的常见原因 The element has been deleted entirely:该元素已被删除【更常见】 The element is no longer attac

    2024年02月08日
    浏览(50)
  • Selenium自动化测试中如何抓取网络请求响应及WebSocket信息

    我们在使用Selenium测试Web或Electronjs/Cef框架应用时,有时候操作一个元素需要判断是否发送了请求以及请求的参数是否正确 我们可以通过,开启Chrome的性能日志来然后配合driver.get_log(\\\"performance\\\")来查看请求,然后对Network相关的日子进行过滤, 实现如下: 运行结果如下: 由于日

    2024年02月16日
    浏览(56)
  • 如何使用jenkins、ant、selenium、testng搭建自动化测试框架

    如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入,然后写一些测试脚本,这就是你所说的自动化测试,其实这个还不能算是真正的自动化测试,你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗?没有吧!应为那样真的是很low的!下面说一下

    2024年04月16日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包