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

yizhihongxing

我来为您详细讲解“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日

相关文章

  • 分布式医疗挂号系统整合Gateway网关解决跨域问题

    分布式医疗挂号系统整合Gateway网关解决跨域问题教程 一、背景 随着互联网技术的快速发展,越来越多的医院开始接受互联网挂号服务,但是同时也出现了医院之间的系统隔离和跨域问题。针对这个问题,我们可以采用分布式系统架构+Gateway网关的方式进行解决,下面详细讲解。 二、分布式系统架构介绍 分布式系统架构是指采用不同计算机之间的互联网连接以及信息共享、相互…

    人工智能概览 2023年5月25日
    00
  • MongoDB数据库设置账号密码完整步骤

    下面是“MongoDB数据库设置账号密码完整步骤”的完整攻略: 一、开启MongoDB的权限认证 在MongoDB中开启权限认证是保证数据安全性的基本方法。开启方法如下: 1.进入MongoDB Windows系统,在CMD中输入以下命令: cd C:\Program Files\MongoDB\Server\4.2\bin mongo.exe 2.连接服务…

    人工智能概论 2023年5月25日
    00
  • C# 使用AspriseOCR.dll实现验证码识别

    C# 使用AspriseOCR.dll实现验证码识别 本文将介绍如何使用AspriseOCR.dll实现验证码识别,AspriseOCR.dll是一款非常优秀的OCR识别库,能够实现各种验证码的识别。 安装AspriseOCR.dll 首先,我们需要下载AspriseOCR.dll,可以在官网 https://asprise.com/ocr/ 下载。下载完成…

    人工智能概论 2023年5月25日
    00
  • Surface Laptop Studio商用版值得入手吗 Surface Laptop Studio商用版评测

    Surface Laptop Studio商用版值得入手吗 1. 引言 Surface Laptop Studio商用版是微软推出的一款高端商用笔记本电脑,它的外观设计和创新的转形功能备受瞩目。如果你正在考虑购买这款笔记本电脑,那么你需要仔细考虑它的性能和功能是否能够满足你的需求,以及它是否能够帮助你提高工作效率。接下来,我们将详细介绍Surface Lap…

    人工智能概览 2023年5月25日
    00
  • Python脚本制作天气查询实例代码

    想要制作一款能够查询天气的Python脚本,我们可以从以下步骤入手: 步骤一:获取天气API 要想制作能够查询天气的Python脚本,我们需要先获取一个天气API。目前市面上的天气API有很多种,比如心知天气、和风天气等。这里我们以心知天气为例,具体操作步骤如下: 进入心知天气官网(https://www.seniverse.com/ ),注册并登录账号。 …

    人工智能概论 2023年5月24日
    00
  • window平台安装MongoDB数据库图文详解

    来为您详细讲解“window平台安装MongoDB数据库图文详解”的完整攻略吧。 前置条件 在开始安装 MongoDB 之前,需要确保满足以下两个前置条件: 你需要一台运行的 Windows 操作系统电脑; 需要下载 MongoDB 的安装文件。 下载 MongoDB 在下载之前,我们需要确认一下系统的位数。请在“计算机”或者“此电脑”的属性中查看系统类型,…

    人工智能概览 2023年5月25日
    00
  • 有道云笔记app怎么使用OCR识别功能?

    下面是有道云笔记app使用OCR识别功能的详细攻略。 什么是OCR识别功能? OCR(Optical Character Recognition,光学字符识别技术)是指利用光学扫描仪或数码相机等设备将纸质文档转换为数字化文档,并且对其中的文字进行识别和分析的技术。有道云笔记app对OCR技术进行了应用,用户可以使用OCR识别功能将纸质文档上的文字快速转换为数…

    人工智能概览 2023年5月25日
    00
  • 随书源码

    什么是随书源码? 随书源码是指在一本书的附录中提供的书本配套代码资料。它为读者提供了一个快速深入了解和学习某一个主题或技术的途径,使读者可以更好地了解实现的方法和步骤,以及通过代码实现概念和理论的应用方法。 随书源码的优势 提供随书源码的好处有很多,下面列出了其中的几个: 便于深入学习:随书源码能够帮助读者更好地理解教材上的概念和技术,调试代码也能够帮助读者…

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