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日

相关文章

  • Ubuntu 20.04 CUDA&cuDNN安装方法(图文教程)

    以下是“Ubuntu 20.04 CUDA&cuDNN安装方法(图文教程)”的详细攻略: 准备工作 首先,确认您的计算机上已安装了Ubuntu 20.04操作系统,并且已连接互联网。 其次,为了成功安装CUDA和cuDNN,您需要在计算机上安装NVIDIA GPU驱动程序。可以通过以下命令检查您计算机上的GPU类型: lspci | grep -i …

    人工智能概览 2023年5月25日
    00
  • PPOCRLabel标注的txt格式如何转换成labelme能修改的json格式

    以下是将PPOCRLabel标注的txt格式转换成labelme能修改的json格式的完整攻略: 1. 确认PPOCRLabel标注格式 在将PPOCRLabel标注的txt格式转换成labelme能修改的json格式之前,我们需要首先确定PPOCRLabel标注格式的具体规则和内容。PPOCRLabel标注的txt格式通常是由以下信息组成: 图片名称,标注…

    人工智能概览 2023年5月25日
    00
  • Python 分支结构详解

    Python 分支结构详解 结构介绍 Python 的分支结构主要包括 if 语句和 if…else… 语句。if 语句用于根据条件的布尔值选择执行不同的代码块,if…else… 语句则用于满足两个以上的执行条件情况。Python 中的分支结构为程序的决策提供了灵活性,使得程序更加智能化和可靠。 if 语句 if 语句支持单条件的判断。语法如…

    人工智能概论 2023年5月25日
    00
  • 了解你的助手 扫描仪基础知识详解

    了解你的助手 扫描仪基础知识详解 什么是扫描仪? 扫描仪是一种可以将纸质文档、照片、绘画等实物转换成数字格式的设备。它通常包括一个扫描头、一个镜头、一个传感器和一台电脑等组件。 扫描头是扫描仪中最重要的组件之一,它通常由数十甚至数百个光电传感器组成,用于转换成数字信号的物理图像。传感器则用来控制扫描头的位置和方向,以确保扫描结果的精确度。 扫描仪可分为两种类…

    人工智能概览 2023年5月25日
    00
  • python Web开发你要理解的WSGI & uwsgi详解

    让我详细讲解一下“Python Web开发你要理解的WSGI & uWSGI详解”攻略。 WSGI简介 WSGI是Web服务器网关接口(Web Server Gateway Interface)的缩写。WSGI是一种Web服务器和Web应用程序(如Python程序)之间通信的标准接口。 WSGI规范定义了Web服务器和Web应用程序之间的接口,使得开…

    人工智能概览 2023年5月25日
    00
  • Django如何开发简单的查询接口详解

    当开发Django应用程序时,创建API接口是很常见的一步。API接口允许第三方应用访问你的应用程序数据。在本文中,我们将介绍如何开发一个简单的查询接口。 第一步:创建Django项目和应用 首先,需要创建Django项目和应用。可以通过以下指令来完成: $ django-admin startproject projectname $ python man…

    人工智能概论 2023年5月25日
    00
  • 分布式医疗挂号系统EasyExcel导入导出数据字典的使用

    分布式医疗挂号系统EasyExcel导入导出数据字典的使用 简介 分布式医疗挂号系统是一款以医院挂号业务为主线,为广大患者提供线上看病、在线咨询、预约挂号、处方购买等全方位一站式服务的医疗系统。数据字典是该系统中重要的文档,用于记录系统中各种实体和字段的相关信息,方便管理和开发人员查看和使用。本文主要介绍EasyExcel导入导出数据字典的使用。 什么是Ea…

    人工智能概览 2023年5月25日
    00
  • python 生成唯一id的四种方式

    当我们需要生成唯一的ID时,Python提供了多种方法可以做到这一点。以下是四种常见的方法: 方法一:使用 uuid 模块 Python内置了uuid模块,可以用于生成唯一的ID。示例代码如下: import uuid print(uuid.uuid1()) # 根据时间戳生成UUID print(uuid.uuid3(uuid.NAMESPACE_DNS,…

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