返回顶部
首页 > 资讯 > 后端开发 > Python >selenium+opencv实现滑块验证码的登陆
  • 176
分享到

selenium+opencv实现滑块验证码的登陆

selenium opencv滑块验证码opencv滑块验证码 2023-05-15 17:05:55 176人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录环境selenium登录网站requests抓取验证码图片OpenCV识别缺口位置模拟拖动滑块脚本示例:很多网站登录登陆时都要用到滑块验证码,在某些场景例如使用爬虫爬取信息时常常

很多网站登录登陆时都要用到滑块验证码,在某些场景例如使用爬虫爬取信息时常常受到阻碍,想着用opencv的模板匹配试试能不能实现模拟登陆。本来觉得网上资料多应该还蛮容易,但实际上手还是搞了蛮久,在这里记录一下整个流程,网站无所谓主要是要有滑动验证码:

环境

python 3.9, selenium和Opencv相关依赖,用于抓取图片的requests包,具体安装这里不多讲了,其中selenium用的火狐版本。

selenium登录网站

整体流程就是这个样子:访问网站->点击登录->输入账号密码->搞定滑块验证->登录网站,其中最大的难点是滑块验证码,但在此之前我们当然要先让selenium自动打开网站把账号密码输好,我们通过find_element()方法定位输入框之后执行操作,元素的各个属性F12就可以找到:

代码如下:

options = WEBdriver.FirefoxOptions()
driver = webdriver.Firefox(options=options)
driver.get('网址')
driver.find_element("link text", "登录").click()
name = driver.find_element("id", "name-input")
name.send_keys("账号######") # 输入账号
pw = driver.find_element("id", "passWord-input")
pw.send_keys("密码#########") # 输入密码
driver.find_element("id", "submit").click() # 提交

requests抓取验证码图片

为了做后续处理我们需要把滑块验证码相关图片抓到本地,网上关于滑块验证码这块很多都是用原图和有缺口的图对比来确定缺口位置的,但是我并没有找到原图,这里用到的是有缺口的背景图和滑块图,如下:

滑块图:

有缺口的背景图:

这里爬图是selenium定位之后用requests包爬的,注意验证码和登陆界面不在一个iframe里,selenium记得切到对应iframe才能定位到图片,代码如下:

driver.switch_to.frame('tcaptcha_iframe')
 # 切换iframe
img = driver.find_element("id", "slideBg").get_attribute('src')
headers = {
    'Accept': "application/JSON, text/plain, **",
        'User-Agent': "Mozilla/5.0 (windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/65.0.3325.181 Safari/537.36"
    }
    driver.get('网址')
    driver.find_element("link text", "登录").click()
    name = driver.find_element("id", "name-input")
    name.send_keys(username)
    pw = driver.find_element("id", "password-input")
    pw.send_keys(password)
    driver.find_element("id", "submit").click()
    time.sleep(2)
    driver.switch_to.frame('tcaptcha_iframe')
    img = driver.find_element("id", "slideBg").get_attribute('src')
    r = requests.get(img, headers=headers)
    with open('img.png', 'wb') as f:
        f.write(r.content)
    block = driver.find_element("id", "slideBlock").get_attribute('src')
    r = requests.get(block, headers=headers)
    with open('block.png', 'wb') as f:
        f.write(r.content)
 
 
if __name__ == '__main__':
    options = webdriver.FirefoxOptions()
    driver = webdriver.Firefox(options=options)
    user = "##########"
    pw = "############"
    login_in(user, pw)
    image = "img.png"
    tpl = "block.png"
    length = block_loc.match(image, tpl)
    print(length)
    drag_block(length)

Opencv部分:

import cv2
import numpy as np
 
 
def avg_mean(img):
    mean_val, _, _, _ = cv2.mean(img)
    print("平均灰度:", mean_val)
    return mean_val
 
 
def match(image, temp):
    img = cv2.imread(image)
    tpl = cv2.imread(temp)
    tpl_gray = cv2.cvtColor(tpl, cv2.COLOR_BGR2GRAY)
    # cv2.imshow("111", tpl_gray)
    width, height = tpl_gray.shape
    for h in range(height):
        for w in range(width):
            if tpl_gray[w, h] == 0:
                tpl_gray[w, h] = 96
    binary = cv2.inRange(tpl_gray, 96, 96)
    kernel = np.ones((8, 8), np.uint8)
    template = cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel)
    # cv2.imshow('tpl', template)
    print(img.shape)
    gauss = cv2.GaussianBlur(img, [5, 5], 0)
    img_gray = cv2.cvtColor(gauss, cv2.COLOR_BGR2GRAY)
    # cv2.imshow("111", img_gray)
    if avg_mean(img) > 140:
        ret, target = cv2.threshold(img_gray, 105, 255, cv2.THRESH_BINARY) # 二值化
    elif avg_mean(img) > 102:
        ret, target = cv2.threshold(img_gray, 95, 255, cv2.THRESH_BINARY)  # 二值化
    else:
        ret, target = cv2.threshold(img_gray, 80, 255, cv2.THRESH_BINARY)
    # cv2.imshow('target', target)
    result = cv2.matchTemplate(target, template, cv2.TM_CCOEFF_NORMED)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
    left_up = max_loc
    print(left_up)
    right_down = (left_up[0] + height, left_up[1] + width)
    cv2.rectangle(img, left_up, right_down, (0, 0, 255), 2)
    # cv2.imshow('res', img)
    length = (left_up[0] - 26*2)/2
    return length

到此这篇关于selenium+opencv实现滑块验证码的登陆的文章就介绍到这了,更多相关selenium opencv 滑块验证码内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: selenium+opencv实现滑块验证码的登陆

本文链接: https://lsjlt.com/news/209291.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • selenium+opencv实现滑块验证码的登陆
    目录环境selenium登录网站requests抓取验证码图片OpenCV识别缺口位置模拟拖动滑块脚本示例:很多网站登录登陆时都要用到滑块验证码,在某些场景例如使用爬虫爬取信息时常常...
    99+
    2023-05-15
    selenium opencv滑块验证码 opencv滑块验证码
  • 怎么使用selenium+opencv实现滑块验证码的登陆
    本文小编为大家详细介绍“怎么使用selenium+opencv实现滑块验证码的登陆”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用selenium+opencv实现滑块验证码的登陆”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-07-06
  • OpenCV结合selenium实现滑块验证码
    本次案例使用OpenCV和selenium来解决一下滑块验证码 先说一下思路: 弹出滑块验证码后使用selenium元素截图将验证码整个背景图截取出来 将需要滑动...
    99+
    2024-04-02
  • SpringBoot实现滑块验证码验证登陆校验功能详解
    目录前言一、实现效果二、实现思路三、实现步骤1. 后端 java 代码1.1 新建一个拼图验证码类1.2 新建一个拼图验证码工具类1.3 新建一个 service 类1.4 新建一个...
    99+
    2024-04-02
  • python+selenium行为链登录12306(滑动验证码滑块)
    使用python网络爬虫登录12306,网站界面如下。因为网站的反爬是不断升级的,以下代码虽然当前可用,但早晚必将会不再能满足登录需求。但是知识的价值,是不容置疑的。 from s...
    99+
    2024-04-02
  • 用selenium解决滑块验证码
    前言 因为种种原因没能实现愿景的目标,在这里记录一下中间结果,也算是一个收场吧。这篇博客主要是用selenium解决滑块验证码的个别案列。 思路: 用selenium打开浏览器指定网站将残缺块图片和背...
    99+
    2023-09-04
    selenium chrome python
  • 用selenium解决滑块验证码的实现步骤
    目录前言实现步骤1. 用selenium打开浏览器浏览指定网站1.1 找到chromedriver.exe的路径1.2 代码2.将残缺块图片和背景图片下载到本地2.1 找到图片位置2...
    99+
    2023-02-14
    selenium 滑动验证码 selenium 滑块验证 滑块验证码自动识别
  • JavaScript实现登录滑块验证
    本文实例为大家分享了JavaScript实现登录滑块验证的具体代码,供大家参考,具体内容如下 html代码 <div class="login-select"> ...
    99+
    2024-04-02
  • JavaScript实现滑块验证码
    本文实例为大家分享了JavaScript实现滑块验证码的具体代码,供大家参考,具体内容如下 效果:鼠标在底部滑块上按下按住不松拖动可以移动滑块,上面大图里面带有小图背景的滑块也会跟随...
    99+
    2024-04-02
  • 微信小程序实现登陆注册滑块验证
    目录一、创建自定义组件MoveVerify二、在index页面使用本文实例为大家分享了微信小程序实现登陆注册滑块验证的具体代码,供大家参考,具体内容如下 一、创建自定义组件Mov...
    99+
    2024-04-02
  • vue实现登录时滑块验证
    本文实例为大家分享了vue实现登录时滑块验证的具体代码,供大家参考,具体内容如下 1.效果图 2. 新建 SliderCheck.vue组件 <template> &...
    99+
    2024-04-02
  • Selenium模拟登陆百度(带验证码)
    利用Selenium模拟登陆解决验证码的问题验证码解决方案有很多种:1  通过第三方的打码平台,识别率高...一般都是收费的,价格还不便宜2  自己通过切图,再结合图片识别的库,去识别验证码... 简单的验证码识别率还可...
    99+
    2023-01-30
    验证码 Selenium
  • 利用Java+Selenium+OpenCV模拟实现网页滑动验证
    目录一、需求分析二、模拟步骤1、使用selenium打开某音网页2、找到小滑块以及小滑块所在的背景图3、计算小滑块需要滑动的距离4、按住小滑块并滑动三、学习过程中比较棘手的问题1、截...
    99+
    2024-04-02
  • 登录校验之滑块验证码完整实现(vue + springboot)
    文章目录 前言一、实现效果二、实现思路三、实现步骤1. 后端 java 代码1.1 新建一个拼图验证码类1.2 新建一个拼图验证码工具类1.3 新建一个 service 类1.4 新建一个 controller 类1.5 登录接口 ...
    99+
    2023-08-18
    vue.js spring boot java
  • 微信小程序如何实现登陆注册滑块验证
    这篇文章主要介绍“微信小程序如何实现登陆注册滑块验证”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序如何实现登陆注册滑块验证”文章能帮助大家解决问题。具体效果如下一、创建自定义组件MoveV...
    99+
    2023-06-30
  • Java实现滑块拼图验证码
    本文实例为大家分享了Java实现滑块拼图验证码的具体代码,供大家参考,具体内容如下 1、后端随机生成抠图和带有抠图阴影的背景图片,后台保存随机抠图位置坐标 2、前端实现滑动交互,将抠...
    99+
    2024-04-02
  • Python实现滑块验证码详解
    本节要讲解如下图所示的滑块验证码(更为复杂的滑动拼图验证码在下一篇介绍)。这种验证码机制比较简单:将滑块拖动到滑轨的最右端即可完成验证,如下图所示。如果未将滑块拖动到滑轨的最右端,则...
    99+
    2024-04-02
  • JS 简单实现滑块验证码
    目录开篇:一、实现效果styleScript二、总结与思考开篇: 拖动底部滑块,实现滑块验证码功能 一、实现效果 style *{ margin: 0; padd...
    99+
    2023-05-14
    JS 滑块验证码 JS 验证码
  • JS怎么实现滑块验证码
    本篇内容介绍了“JS怎么实现滑块验证码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!style*{   &nb...
    99+
    2023-07-05
  • Java + Selenium + OpenCV解决自动化测试中的滑块验证问题
    目录1、滑块验证思路2、使用OpenCV进行图片解析2.1 OpenCV引入项目2.2 实现图片解析,计算所需距离2.3 算法解析说明3、Selenium处理滑块滑动4、最终效果最近...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作