即便乌云尽染天空,旭阳依然在某处照耀

验证码的种类有很多,我们常见的有短信验证码、语音验证码、字符验证码、图片验证码、滑动验证码等。今天主要给小伙伴们分享在web自动化测试中,如何处理滑动验证码?
首先,处理滑动验证码的方法有以下几种:

  • 图像处理
  • 通过cookie绕过
  • 接口绕过

今天主要分享的是通过图像处理的方法来处理滑动验证码。
以豆瓣官网为例,进入官网之后,点击密码登录,输入账号和密码之后,点击登录,即可跳出滑动验证码,随即人工操作即可成功。那我们现在使用自动化的方式来操作这一系列步骤。

整个过程可以分为以下几步

  1. 显示验证码
  2. 获得滑块以及滑板的图片地址
  3. 下载滑块以及滑板图片
  4. 人工智能匹配滑块验证码距离(opencv)
  5. 缩放比例以及校准滑块偏移量
  6. ActionChains滑动解锁
  7. 滑动失败后增加重试机制

环境准备:

pip install opencv-python

完整代码如下

import cv2
from selenium import webdriver
import requests
from time import sleep
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import Bydriver = webdriver.Chrome()
while True:#1. 显示滑动验证码driver.get('https://www.douban.com/')driver.implicitly_wait(10)sleep(3)driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="anony-reg-new"]/div/div[1]/iframe'))driver.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]').click()driver.find_element(By.XPATH,"//*[@id='username']").send_keys("18888888888")driver.find_element(By.XPATH,'//*[@id="password"]').send_keys("123456")driver.find_element(By.XPATH,'/html/body/div[1]/div[2]/div[1]/div[5]/a').click()sleep(2)#2. 获取到滑块以及滑板到图片地址driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="tcaptcha_iframe"]'))##2.1 滑块slideBlock = driver.find_element(By.XPATH,'//*[@id="slideBlock"]')slideBlock_url = slideBlock.get_attribute("src")##2.2 滑板slideBg = driver.find_element(By.XPATH,'//*[@id="slideBg"]')slideBg_url = slideBg.get_attribute("src")#print(slideBg_url)#print(slideBlock_url)#3. 下载滑块和滑板with open('images/big_images.jpg','wb') as f:f.write(requests.get(slideBg_url).content)f.close()with open('images/small_images.jpg','wb') as f:f.write(requests.get(slideBlock_url).content)f.close()#4. 智能匹配滑块和滑板的小图重叠后x的距离big_grag = cv2.imread("images/big_images.jpg",0) # 以灰度模式加载图片small_grag = cv2.imread("images/small_images.jpg",0) # 以灰度模式加载图片)res = cv2.matchTemplate(big_grag,small_grag,cv2.TM_CCORR_NORMED) #匹配对象cv2.imreadvalue = cv2.minMaxLoc(res)print("value的值",value)x = value[2][0]print(x)#5. 缩放比例以及校准滑块偏移量,原图是680*390,实际是282*162x = int(x*282/680)py = 31 - int(20*282/680)x = x-pyprint(x)#6. 通过ActionChains滑动解锁hk_ele = driver.find_element(By.XPATH,'//*[@id="slideBlock"]')action = ActionChains(driver) # 初始化一个鼠标对象action.click_and_hold(hk_ele).perform()  #鼠标按住不动action.drag_and_drop_by_offset(hk_ele,x,0).perform() #把滑动移动到指定的坐标,0代表纵坐标sleep(3)## 如果元素不存在,则表示成功#7. 滑动失败后增加重试机制try:driver.find_element(By.XPATH,'//*[@id="captcha_close"]/div')except Exception as e:break

如果觉的还不错,给个赞呗,在这个夏天,让我们共同进步。

Web自动化处理“滑动验证码”相关推荐

  1. web自动化之tesseract验证码识别,识别成功

    OCR识别技术 OCR中文名称光学识别, tesseract是一个有名的开源OCR识别框架,它与Leptonica图片处理库结合,可以读取各种格式的图像并将它们转化成超过60种语言的文本,可以不断训练 ...

  2. BiliBili等网站极验滑动验证码的详细破解过程

    基于selenium自动化的滑动验证码破解 selenium python 验证码 1.环境配置(Linux) python2.7 pip安装的库:selenium , PIL Chrome浏览器 , ...

  3. selenium自动化案例(二)滑动验证码破解

    文章目录 写在前面 大致思路 Python实现 几个小坑 写在前面 最近学习了滑动验证的一个破解思路,是利用OpenCV的图形匹配算法进行对比验证,从而推算出滑块移动的距离,在实际应用中比较常见,我主 ...

  4. 2.2.7 Web自动化验证码处理

    前言 对于测试人员来说,不管是进行性能测试还是自动化测试其验证码处理都是一个比较棘手的问题:但是对于web 应用来说,大部分的系统在用户登录时都要求用户输入验证码,且验证码的种类众多,例如:纯数字.纯 ...

  5. web自动化之验证码识别解决方案

    验证码识别解决方案 对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的,再复杂一点就是滑动 ...

  6. 滑动验证码自动化实现(1)

    验证码分类 验证码,主要是用于区分 人 与 机器人(robot)的行为而采取的防范自动化的产物,其类型可以分为 识别型 和 行为类验证码. 识别类验证码包括:若干个单一种类的字符,如大小写字母.数字. ...

  7. 告别手动输入验证码!Web自动化测试带你解锁验证码处理和Cookie机制,跨越测试瓶颈!

    Web自动化之验证码处理及cookie机制 在Web自动化测试中,验证码的处理一直是一个难点.如果没有自动化处理方式,手动输入验证码将会非常耗时且容易出错.本文将为大家介绍如何通过Python实现验证 ...

  8. web自动化Python获取Redis缓存验证码

    在进行UI自动化测试过程中,有些情况下登录可能需要进行验证码验证 自动化测试中图片验证码是一个很常见的问题,解决的方法也有很多,比如: 使用OCR识别的技术,对验证码的图片进行字符识别 让开发提供一个 ...

  9. WEB自动化(5)获取网站验证码即从验证码截图中获取图片中的字符串

    WEB自动化(1)环境安装及打开浏览器实例 WEB自动化(2)常用的元素定位方法之xpath详解 WEB自动化(3)PO设计模式原理与实现 WEB自动化(4)使用selenium将网站验证码截图保存为 ...

最新文章

  1. 普通(实例)方法和实例方法的定义和调用
  2. Visual Studio 2008 快捷键大全
  3. 巨一自动化工业机器人_2021第11届深圳国际工业自动化及机器人展览会
  4. python 运维自动化之路 Day2
  5. mysql每次查询1000条数据库_30多条mysql数据库优化方法,千万级数据库记录查询轻松解决...
  6. nginx配置:支持phpfastcgi,nginx和php-cgi通信,部分nginx常量解释
  7. ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
  8. curl 发送各种格式的请求
  9. 《Java编程思想》笔记10------字符串
  10. 例2.12 今年暑假不AC - 九度教程第22题(贪心算法)
  11. DEVC编译器快捷键大全
  12. Ros系统配置DNS服务器,ros设置dns服务器
  13. 树莓派 USB摄像头 实现网络监控( MJPG-Streamer)
  14. VFP_全面控制EXCEL
  15. 大数据在互联网行业的应用
  16. B - Ternary Logic
  17. 你的电脑/设备需要恢复 错误码0xc000014c
  18. 著者四角号码查询_著者姓名汉语拼音与四角号码数字混合编制书次号之见
  19. 【软件定义汽车】【中间件】iceoryx冰羚
  20. 超市管理系统-1(JavaSwing和Oracle数据库)

热门文章

  1. java计算机毕业设计高校大学生就业系统源码+mysql数据库+系统+lw文档+部署
  2. 配置 MLTP:win10+PyCharm+conda
  3. PowerUp攻击模块讲解
  4. 第五章 数 组-1147:最高分数的学生姓名
  5. 王者荣耀AI相关文章解读:Hierarchical Macro Strategy Model for MOBA Game AI
  6. 微型计算机原理尹建华答案,《微型计算机原理和接口技术》(尹建华)习题答案解析...
  7. 个人仿QQ引导页html源码极速安装【美观大气】
  8. 初学者怎么样提高c/c++编程能力?
  9. idea快捷键和leetCode快捷键
  10. paddleocr文本检测模型的训练