【AI机器学习入门与实战】使用OpenCV识别滑动验证码案例

文章介绍了如何利用OpenCV进行图像处理,识别滑动验证码的缺口,并结合Selenium自动化工具模拟拖动滑块,解决验证码验证问题。主要步骤包括边缘检测、匹配模板和计算偏移量,最后通过Selenium的ActionChains执行拖动操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

👍【AI机器学习入门与实战】目录
🍭基础篇
🔥 第一篇:【AI机器学习入门与实战】AI 人工智能介绍
🔥 第二篇:【AI机器学习入门与实战】机器学习核心概念理解
🔥 第三篇:【AI机器学习入门与实战】机器学习算法都有哪些分类?
🔥 第四篇:【AI机器学习入门与实战】数据从何而来?
🔥 第五篇:【AI机器学习入门与实战】数据预处理的招式:闪电五连鞭!
🔥 第六篇:【AI机器学习入门与实战】选择合适的算法:选择比努力重要!
🔥 第七篇:【AI机器学习入门与实战】训练模型、优化模型、部署模型
🍭实战篇
🔥 第八篇:【AI机器学习入门与实战】用户RFM模型聚类分层实战
🔥 第九篇:【AI机器学习入门与实战】使用OpenCV识别滑动验证码案例
🔥 第十篇:【AI机器学习入门与实战】CNN卷积神经网络识别图片验证码案例
未完待续…

在登录或者爬虫的过程中,我们经常遇到滑动验证码,那滑动验证码如何解决呢?使用开源的OpenCV和Selenium爬虫框架就可以帮助我们完成任务!下面让我们一起攻破它~!

验证码图片如下:

在这里插入图片描述

OpenCV简介
 
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,实现了图像处理和计算机视觉方面的很多通用算法。它是目前计算机视觉领域最牛B最🔥的工具库,关于图像方面的问题都要使用OpenCV这个库!


滑动验证码的识别思路:

滑动验证码的识别关键是如何识别图片中的缺口,然后计算缺口的偏移(offset)距离。再通过Selenium自动化测试工具,拖拽滑块到偏移(offset)位置,即可解决滑块的验证问题。

但是这里需要注意一点,有一些反爬策略会验证滑块移动的路径和速度,用于验证是机器还是人为操作,所以再使用Selenium拖动滑块时,我们最好控制滑动速率并且可以来回晃动一下滑块再移动到准确位置。

通过OpenCV识别滑动验证码缺口

那么如何识别图片中的缺口呢?其实很简单,只通过OpenCV就可以完美的帮助我们识别缺口

完整代码如下:

import cv2


def cv2_match_template(bg_path, tp_path):
    """
    滑动验证码匹配
    :param bg_path:
    :param tp_path:
    :return:
    """
    bg_img = cv2_imread(bg_path)
    tp_img = cv2_imread(tp_path)

    # 边缘检测
    img_canny1 = cv2.Canny(bg_img, 200, 460)
    img_canny2 = cv2.Canny(tp_img, 200, 460)

    # 转换图片格式
    bg_pic = cv2.cvtColor(img_canny1, cv2.COLOR_GRAY2RGB)
    tp_pic = cv2.cvtColor(img_canny2, cv2.COLOR_GRAY2RGB)

    # 缺口匹配
    res = cv2.matchTemplate(bg_pic, tp_pic, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)  # 寻找最优匹配

    tl = max_loc  # 左上角点的坐标

    x_offset = int(tl[0])
    # 15 是滑动验证码凸起的距离
    x_offset = (x_offset / ConfigUtil.RENDERED_RATIO) + 17
    return x_offset

识别过程主要有如下几个步骤:

  1. 通过 cv2.imread(path)读入图片数据
  2. 通过 cv2.Canny(bg_img, 200, 460) 进行边缘检测
  3. 转换图片格式 cv2.cvtColor(img_canny1, cv2.COLOR_GRAY2RGB)
  4. 进行缺口匹配 cv2.matchTemplate()
  5. 寻找最优匹配 cv2.minMaxLoc(res)
  6. 获得缺口偏移量offset

识别效果如下:

在这里插入图片描述

缺口的偏移量拿到后,就可以通过Selenium框架来拖动滑块到指定的偏移量位置就可以了。

伪代码如下,感兴趣自行实现。

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

# 创建浏览器对象
driver = webdriver.Chrome()

# 打开验证码页面
driver.get("https://example.com")

# 获取滑块元素和背景图元素
slider = driver.find_element_by_xpath("//div[@class='slider']")
bg_img = driver.find_element_by_xpath("//div[@class='bg-img']")

# 通过OpenCV获取滑块偏移量,使用上面的方法
//cv2..........................

# 创建 ActionChains 对象
actions = ActionChains(driver)

# 拖动滑块
actions.click_and_hold(slider).move_by_offset(x_offset, 0).release().perform()


🎉 如果喜欢这篇文章,点赞👍 收藏关注 ✅ 哦,创作不易,感谢!😀

请添加图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涛声依旧叭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值