Selenium实现滑动滑块验证码验证!

news/2024/9/22 14:52:46/

背景:在部分的登录中有滑动验证码的验证,由于滑动验证码的缺块是随机的就导致实现起来比较困难!

01、实现方案

  • 模板匹配

通过openCV分析两个图片的相似度,获取两个相似度很高图片的坐标,从而计算两个图片的距离。

  • 轮廓检测

通过openCV进行轮廓检测,即在大图片中找到缺口位置的坐标,然后计算小图片到缺口位置的距离。

02、知识准备

python语言

这里不再赘述,本篇主要还是使用python技术来实现。

selenium

selenium是一个用于测试Web应用程序的Python库。它可以模拟用户在浏览器中的操作,例如点击、填写表单等。Selenium可以与各种浏览器交互,并提供了丰富的API来控制浏览器行为和获取网页内容。

urllib库

urllib是Python标准库之一,用于处理URL相关的操作。它包含多个子模块,例如

  • urllib.request用于发送HTTP请求并获取响应

  • urllib.parse用于解析和构建URL

  • urllib.error用于处理URL相关的错误等

  • urllib常用于网络数据抓取、访问API等任务。

cv2库

cv2是OpenCV(Open Source Computer Vision)库的Python绑定。OpenCV是一个广泛使用的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。cv2库为Python开发者提供了对OpenCV功能的访问,可以进行图像加载、处理、分析以及计算机视觉任务,如人脸识别、目标检测等。

安装注意事项:

如果直接通过pip install cv2安装报错的话,请使用下面的语句安装:pip install opencv-python

random库

random是Python的随机数生成库。它提供了多种随机数生成函数,包括生成伪随机数的函数和从序列中随机选择元素的函数。random库可用于模拟、游戏开发、密码学等领域,以及各种需要随机性的应用程序。

re库

re是Python的正则表达式模块,用于对字符串进行模式匹配和处理。正则表达式是一种强大的文本匹配工具,可以用来搜索、替换、提取特定模式的字符串。re库提供了函数和方法来编译正则表达式、执行匹配操作,并返回匹配结果,使得处理文本数据更加灵活和高效

time库

time库是处理时间的标准库,提供了获取系统时间、格式化输出、系统级精确计时等功能。

03、实现步骤

打开登录页切换密码登录

第一步,打开登录页面,并点击页面上的“密码登录”:

图片

代码:

图片

输账密点击登录

第二步,输入账号密码,并点击“登录豆瓣”按钮:

图片

代码:

图片

切换焦点并下载验证图片

将焦点切换至滑块验证区域,并下载加载好的滑块验证背景图片。
点击登录按钮后,就会出现滑块验证区域,这是一个新增的frame区域,此时我们需要将切换的焦点从主页面转换到这个frame区域上:

图片

代码:

图片

然后我们需要获取整个需要对其的大图片,获取其路径并下载到本地,准备进行读取验证,下载图片效果:

图片

代码:

图片

拖动滑块至缺口处

我们接下来要做的,是将小拼图图片,移动到缺口处:

图片

我们需要获取小图片到缺口处的实际距离,一般用到两种方法。

  • 第一种方法是模板匹配,通过openCV分析两个图片的相似度,获取两个相似度很高图片的坐标,从而计算两个图片的距离。

  • 第二种方法是轮廓检测,通过openCV进行轮廓检测,即在大图片中找到缺口位置的坐标,然后计算小图片到缺口位置的距离。

这里因为我们无法单独获取小拼图的单独图片,所以不好使用模板匹配的方法,所以我们选择使用第二种轮廓检测的方法。

(1)得到缺口轮廓位置信息

首先我们计算一下缺口的坐标及面积大概有多大,使用PhotoShop打开下载的图片,单独将缺口按照正方形的尺寸抠出来,发现其长宽各是80像素:

图片

所以这个封闭矩形的面积范围大概是在80*80=6400像素左右。周长是80*4=320像素。但是现实中这里是有缺口的,不是一个完整的图片,所以我们需要给它一定的误差范围,这里我们暂定目标区域面积为上下百分之四,周长为上下百分之四。

然后我们将计算距离:

图片

执行结果:

图片

生成的目标区域画红框的计算图片:

图片

好了,到此为止我们获取到了一个重要的数据,就是缺口的位置信息。

(2)匹配小滑块元素

得到小滑块元素,让其移动位置到上面计算的距离。

注意:

由于大部分网站有检测真人操作的逻辑,所以我们这里要模拟真人进行移动操作,不能一下移动到目标点,需要一点一点的移动。

图片

执行结果

图片

04、其他

浏览器获取元素

  • 打开F12

图片

  • 选择元素

图片

  • 复制元素XPath

图片

  • 检验元素XPath唯一性

Ctrl+F唤起搜索

输入复制的XPath

查看是否唯一

图片

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


http://www.ppmy.cn/news/1528858.html

相关文章

MTK zephyr平台:USB升级、枚举流程

一、USB升级流程 通过代码及log分析,当前平台升级过程在PL阶段进行 USB download相关代码 mtk/modules/hal/boot/preloader/platform/flashc/ mtk/modules/hal/boot/preloader/platform/board_name/flash/ mtk/modules/hal/boot/preloader/platform/board_name/src/drive…

【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现

1.二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) 前序遍历方式:根-左子树-右子树。 递归实现: 要传一个子函数来实先递归,原因是原函数返回值为vector,在原函数迭代,返回值就难…

gin配置swagger文档

一、基本准备工作 1、安装依赖包 go get -u github.com/swaggo/swag/cmd/swag go get -u github.com/swaggo/gin-swagger go get -u github.com/swaggo/files2、在根目录上配置swagger的路由文件 //2.初始化路由router : initialize.Routers()// 配置swaggerdocs.SwaggerInfo…

Spark SQL性能优化高频面试题及答案

目录 高频面试题及答案1. 如何通过分区(Partitioning)优化Spark SQL查询性能?2. 什么是数据倾斜(Data Skew)?如何优化?3. 如何使用广播(Broadcast)优化Join操作?4. 如何优化Spark SQL的Shuffle操作?5. 如何通过缓存(Cache)优化Spark SQL的性能?6. 如何使用合适的…

网络丢包定位记录(二)

网卡驱动丢包 查看:ifconfig eth1/eth0 等接口 1.RX errors: 表示总的收包的错误数量,还包括too-long-frames错误,Ring Buffer 溢出错误,crc 校验错误,帧同步错误,fifo overruns 以及 missed pkg 等等。 …

python qt5 常用

QT5中如何设置让窗口根据屏幕比例显示设置? desktop QDesktopWidget().screenGeometry() self.resize(int(desktop.width() * 0.3), int(desktop.height()*0.5)) QT5中关于背景穿透问题的处理方式? 场景如下:我们在开发的时候&#xff0c…

无人机集群路径规划:麻雀搜索算法(Sparrow Search Algorithm, SSA)​求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化…

MAC 安装 nvm

在Mac上安装NVM(Node Version Manager)可以通过多种方法实现,以下是两种常用的安装方法: 方法一:使用Homebrew安装(推荐) Homebrew是macOS的包管理器,通过它可以方便地安装和管理各…