Java + Selenium + OpenCV解决自动化测试中的滑块验证问题

我来为您详细讲解“Java + Selenium + OpenCV解决自动化测试中的滑块验证问题”的攻略。

一、背景

在进行自动化测试时,经常会遇到需要通过滑块验证的情况,这时候如果采取传统的UI元素定位、模拟鼠标拖动等方式,不仅效率低下,而且容易被反爬虫策略拦截。本文将介绍一种利用Java + Selenium + OpenCV的方式来解决滑块验证问题的方法。

二、步骤

1.环境准备

首先,我们需要在本地安装好Java开发环境、Selenium库和OpenCV库。其中,Selenium库用于模拟用户操作,OpenCV库用于图像识别和处理。

2.录制滑块验证的操作

利用Selenium的WebDriver来打开目标网站,同时录制用户手动操作滑块验证的过程。具体操作步骤包括:

  • 打开目标网站
  • 定位滑块元素
  • 拖动滑块到目标位置
  • 验证是否成功通过滑块验证

通过录制操作,我们可以获得滑块验证过程的相关信息,包括滑块的位置、大小、颜色等。

3.利用OpenCV处理滑块验证图片

将录制的滑块验证图片经过一定的处理,使其能够被OpenCV识别和处理。具体处理过程包括:

  • 灰度化
  • 二值化
  • 去噪
  • Edge detection

处理后的图片可以提高滑块验证的识别准确度。

4. 利用OpenCV识别滑块位置信息

将录制的滑块验证和滑块验证过程的图片经过一定的匹配和识别,得到滑块的位置信息。具体处理过程包括:

  • 模板匹配
  • 二值化
  • 边缘检测
  • 轮廓识别

利用上述方式,我们可以从滑块验证图片中识别到滑块以及验证滑道的位置信息。

5.模拟滑块操作

将得到的滑块位置信息传递给WebDriver,并模拟拖动滑块的操作。具体操作步骤包括:

  • 定位验证滑道
  • 将滑块拖动到目标位置
  • 判断是否通过滑块验证

通过以上的操作,就可以成功地完成滑块验证。

三、示例说明

示例一:模拟滑块验证淘宝登录

我们可以利用淘宝网站的登录页面,来进行滑块验证的模拟操作。以下是具体的实现步骤:

1.打开淘宝网站登录页面

WebDriver driver = new ChromeDriver();
driver.get("https://login.taobao.com/member/login.jhtml");

2.定位滑块元素

WebElement slider = driver.findElement(By.cssSelector("#nc_1_n1z"));

3.录制滑块验证过程

使用Selenium的Actions类来模拟用户操作,并记录滑块的位置信息。

Actions actions = new Actions(driver);
actions.clickAndHold(slider)
    .moveByOffset(258, 0)
    .release()
    .perform();

4.处理滑块验证图片

利用OpenCV库对滑块验证图片进行处理。

Mat grayImage = Imgcodecs.imread("origin.png", Imgcodecs.IMREAD_GRAYSCALE);
Mat binaryImage = new Mat();
Imgproc.threshold(grayImage, binaryImage, 200, 255, Imgproc.THRESH_BINARY);

5.识别滑块位置信息

利用OpenCV库对处理后的图片进行匹配和识别,得到滑块的位置信息。

Mat template = Imgcodecs.imread("template.png", Imgcodecs.IMREAD_GRAYSCALE);
Mat result = new Mat();
Imgproc.matchTemplate(binaryImage, template, result, Imgproc.TM_CCOEFF_NORMED);
Core.MinMaxLocResult mmr = Core.minMaxLoc(result);

6.模拟滑块操作

利用Selenium的Actions类模拟用户拖动滑块的操作。

int xOffset = (int) mmr.maxLoc.x + 10;
Actions actions = new Actions(driver);
actions.clickAndHold(slider)
    .moveByOffset(xOffset, 0)
    .release()
    .perform();

示例二:模拟滑块验证极验验证码

我们可以利用极验验证码的官网,来进行滑块验证的模拟操作。以下是具体的实现步骤:

1.打开极验验证码官网

WebDriver driver = new ChromeDriver();
driver.get("http://www.geetest.com/type/");

2.定位滑块元素

WebElement slider = driver.findElement(By.cssSelector(".geetest_slider_button"));

3.录制滑块验证过程

使用Selenium的Actions类来模拟用户操作,并记录滑块的位置信息。

Actions actions = new Actions(driver);
actions.clickAndHold(slider)
        .moveByOffset(258, 0)
        .release()
        .perform();

4.处理滑块验证图片

利用OpenCV库对滑块验证图片进行处理。

Mat grayImage = Imgcodecs.imread("origin.png", Imgcodecs.IMREAD_GRAYSCALE);
Mat binaryImage = new Mat();
Imgproc.threshold(grayImage, binaryImage, 200, 255, Imgproc.THRESH_BINARY);

5.识别滑块位置信息

利用OpenCV库对处理后的图片进行匹配和识别,得到滑块的位置信息。

Mat template = Imgcodecs.imread("template.png", Imgcodecs.IMREAD_GRAYSCALE);
Mat result = new Mat();
Imgproc.matchTemplate(binaryImage, template, result, Imgproc.TM_CCOEFF_NORMED);
Core.MinMaxLocResult mmr = Core.minMaxLoc(result);

6.模拟滑块操作

利用Selenium的Actions类模拟用户拖动滑块的操作。

int xOffset = (int) mmr.maxLoc.x + 10;
Actions actions = new Actions(driver);
actions.clickAndHold(slider)
    .moveByOffset(xOffset, 0)
    .release()
    .perform();

四、总结

本文通过结合Java、Selenium和OpenCV的技术,成功地解决了自动化测试中的滑块验证问题。利用该方式,可以有效地提高自动化测试的效率和成功率。在实现过程中,需要充分利用录制、处理、识别和模拟等技术手段,为滑块验证的自动化实现提供有力的支持。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java + Selenium + OpenCV解决自动化测试中的滑块验证问题 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境

    下面我将为大家详细讲解一下“Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境”的攻略: 准备工作 在开始搭建之前,我们需要确保准备好以下工作: 安装了 Homebrew,可以使用命令 brew –version 检查是否已安装。 确定自己需要的 PHP 版本,并记录下来。 选择自己需要的数据库,并确保安装了相应的数据库服务和客户端。 安装 …

    人工智能概论 2023年5月25日
    00
  • Spring Cloud 优雅下线以及灰度发布实现

    一、什么是Spring Cloud 优雅下线以及灰度发布实现 Spring Cloud是Spring生态系统中一套快速构建分布式系统的工具集,其中包括多个子项目,如Spring Cloud Netflix、Spring Cloud Eureka、Spring Cloud Config、Spring Cloud Zuul、Spring Cloud Stream…

    人工智能概览 2023年5月25日
    00
  • greenbrower用到的function.js代码集合

    GreenBrowser用到的function.js代码集合 简介 GreenBrowser是一款基于Trident引擎开发的极速浏览器,它用到了一些自定义的功能,功能实现依赖于function.js代码集合。这套代码集合实现了一些常用的功能,例如:获取鼠标坐标、从DOM树中查找元素等。本文将介绍GreenBrowser用到的function.js代码集合的…

    人工智能概论 2023年5月24日
    00
  • Android工具类ImgUtil选择相机和系统相册

    我可以为你讲解如何使用Android工具类ImgUtil选择相机和系统相册。 一、 ImgUtil简介 ImgUtil是一个简单易用的Android图片选择和压缩库,旨在简化Android开发过程中图片选择和压缩的常见问题。它提供了简单的接口来选择并操作图片,支持多图片选择、图片压缩和图片选取的来源(相机、相册等)等功能,以便更快速地完成开发。 二、使用Im…

    人工智能概论 2023年5月25日
    00
  • keras使用Sequence类调用大规模数据集进行训练的实现

    Keras是一个用于深度学习的高级API,它可以在TensorFlow、CNTK、Theano、MXNet等框架之上运行,并提供了简单易用的接口,方便用户进行模型的设计、调试和训练。如果我们需要对大规模数据集进行训练,为了避免内存溢出等问题,可以使用Keras提供的Sequence类来调用数据。本文将详细介绍如何使用Keras的Sequence类实现大规模数…

    人工智能概论 2023年5月25日
    00
  • 2款Python内存检测工具介绍和使用方法

    2款Python内存检测工具介绍和使用方法 什么是Python内存检测工具 Python内存检测工具是一种用于检测Python程序中的内存泄漏和内存使用状况的工具。Python程序运行时会分配一定的内存空间,随着程序的运行,内存分配和回收的操作也会变得越来越复杂。Python内存检测工具可以帮助开发人员快速定位内存泄漏和内存使用状况,提高程序的性能和稳定性。…

    人工智能概览 2023年5月25日
    00
  • 使用Bucardo5实现PostgreSQL的主数据库复制

    使用Bucardo可以将PostgreSQL数据库实现主数据库和备份数据库之间的高可用性复制。下面是使用Bucardo实现PostgreSQL主数据库复制的攻略。 安装Bucardo 首先,需要安装Bucardo。可以在Bucardo官网上下载安装包,也可以使用Linux发行版内置的软件包管理工具进行安装。例如,在Ubuntu上可以使用以下命令安装: sud…

    人工智能概览 2023年5月25日
    00
  • SpringCloud 服务负载均衡和调用 Ribbon、OpenFeign的方法

    关于SpringCloud服务负载均衡和调用Ribbon、OpenFeign的方法,以下是完整攻略: 什么是负载均衡 负载均衡(Load Balance)是指分摊到不同的工作单元上的计算机网络、服务器、磁盘、CPU等资源,以提高系统的性能、可靠性和稳定性。在分布式系统中,负载均衡是非常重要的。 SpringCloud中Ribbon和OpenFeign的介绍 …

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部