一 :可以获取到带有缺口的背景图片和缺口图片

1图片的获取保存

以查询shunfeng快递为例子,使用selenium来进行滑块的验证

# 显示等待
wait = WebDriverWait(driver, 30)
# 等待验证码模块加载完成
wait.until(EC.presence_of_element_located((By.ID, 'tcaptcha_iframe')))
# 切换iframe
driver.switch_to.frame('tcaptcha_iframe')
# 等待图片加载完成
wait.until(EC.presence_of_element_located((By.ID, 'slideBg')))
# 然后就可以定位提取url进行图片的保存

2获取滑动的距离

使用opencv可以很好的解决

pip install opencv-python
def get_long():# 背景图片处理# 灰度图片bg_img = cv2.imread('cpt1.png', 0)# 高斯滤波,模糊化bg_img = cv2.GaussianBlur(bg_img, (3, 3), 0)# 边缘检测, 后两个参数为阈值,一般50,150即可bg_img = cv2.Canny(bg_img, 50, 150)slide_img = cv2.imread('cpt2.png', 0)slide_img = cv2.GaussianBlur(slide_img, (3, 3), 0)slide_img = cv2.Canny(slide_img, 50, 150)# 寻找最佳匹配res = cv2.matchTemplate(bg_img, slide_img, cv2.TM_CCORR_NORMED)min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)top_left = max_loc[0]return top_left

3模拟人类运动轨迹

def get_track(distance):# 记录滑动轨迹tracks = []# 从0开始current = 0# 何时开始减速mid = distance*4/5# 时间t = 0.2# 速度v = 0while current < distance:# 加速度if current < mid:a = 3else:a = -3v0 = vv = v0 + a*tmove = v0*t + 1/2 * a * t * ttracks.append(round(move))current += movetracks.append(distance-sum(tracks))return tracks

distance即为要滑动的距离,传参数时还需要减去滑块本身所处位置的距离

4滑动

# 按钮定位
button = driver.find_element_by_id('tcaptcha_drag_button')
# 事件处理
webdriver.ActionChains(driver).click_and_hold(button).perform()
# 按照轨迹滑动,perform() 依次执行任务
for t in tmp_track:webdriver.ActionChains(driver).move_by_offset(xoffset=t, yoffset=0).perform()
# 释放按钮
webdriver.ActionChains(driver).release(button).perform()

二:不能获取到两张图片


以qidian登陆为例,这里可以看到是无法单独获取到滑块图片,和之前不同的是图片的获取和获取滑动距离,其他都一致

1图片的获取

还是和之前一样,等待滑动验证码的加载完成,这里就不多做注释

wait = WebDriverWait(browser, 30)
wait.until(EC.presence_of_element_located((By.ID, 'loginIfr')))
browser.switch_to.frame('loginIfr')browser.find_element_by_xpath('//*[@id="username"]').send_keys('qeqwewd')
browser.find_element_by_xpath('//*[@id="password"]').send_keys('qweqwe')
browser.find_element_by_xpath('//*[@id="j-inputMode"]/div[2]/a').click()wait.until(EC.presence_of_element_located((By.ID, 'tcaptcha_iframe_dy')))
browser.switch_to.frame('tcaptcha_iframe_dy')
# 定位截屏得到图片
browser.find_element_by_id('slideBg').screenshot('captch.png')

2获取滑动距离

def get_long():bg_img = cv2.imread('captch.png', 0)bg_img = cv2.GaussianBlur(bg_img, (3, 3), 0)canny = cv2.Canny(bg_img, 220, 500)# 图象的边缘显示# cv2.imshow('Canny', canny)# cv2.waitKey(10000)# 轮廓检测contours, hierarchy = cv2.findContours(canny, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)for i, contour in enumerate(contours):  # 所有轮廓# 面积和周长,可以找一个区间尝试if 500 < cv2.contourArea(contour) <= 2000 and 100 < cv2.arcLength(contour, True) < 300:# 外接矩形,x,y是矩形左上角的坐标,w,h为宽高x, y, w, h = cv2.boundingRect(contour)  # print(x, y, w, h)# 绘制矩形# cv2.rectangle(bg_img, (x, y), (x + w, y + h), (0, 0, 255), 2)# cv2.imshow('image', bg_img)# cv2.waitKey(10000)# 找目标缺口,第一个可能是滑块if x <= 200:continuereturn int(x-30)

后面就是计算模仿人类移动轨迹,然后进行按钮定位进行滑动即可

三:可以获取到完整的背景图和带有缺口的背景图

这里获取到图片后可以使用pillow来获取滑动的距离

from PIL import Image, ImageChopsimg_a  = Image.open(path)
img_b  = Image.open(path)
x = ImageChops.difference(img_a, img_b).getbbox()

x为缺口坐标(left, top, right, bottom)
x[0]即为滑动的距离,记得要减去滑块之前的距离

滑动验证码的解决方案相关推荐

  1. 自动化测试中的滑动验证码解决方案

    很多同学反馈,在web自动化的过程中,经常会被登录的验证码给卡住,不知道如何去通过验证码的验证. 今天专门给大家来聊聊验证码的问题,一般的情况下遇到验证码我们可以都可以找开发去帮忙解决,关闭验证码,或 ...

  2. 利用深度学习识别滑动验证码缺口位置

    做爬虫的同学肯定或多或少会为验证码苦恼过,在最初的时候,大部分验证码都是图形验证码.但是前几年「极验」验证码横空出世,行为验证码变得越来越流行,其中之一的形式便是滑块验证码. 滑块验证码是怎样的呢?如 ...

  3. 从零开发一款轻量级滑动验证码插件(深度复盘)

    关注并将「趣谈前端」设为星标 每天定时分享技术干货/优秀开源/技术思维 github地址: https://github.com/MrXujiang/react-slider-vertify 之前一直 ...

  4. 与滑动验证码的斗智斗勇,看如何用Python破解

    前言 很多小伙伴们反馈,在web自动化的过程中,经常会被登录的验证码给卡住,不知道如何去通过验证码的验证.今天专门给大家来聊聊验证码的问题,一般的情况下遇到验证码我们可以都可以找开发去帮忙解决,关闭验 ...

  5. RPA中关于“滑动”验证码与按照“语序”点击两类验证码

    学Python,用RPA 艺赛旗RPA2020.1版本 正在免费下载使用中,欢迎下载使用 www.i-search.com.cn/index.html?from=line1 最近发现很多伙伴在项目中都 ...

  6. selenium爬虫|破解滑动验证码以极验为例

    爬虫访问一些网站遇到滑动验证码解决方案 这里是用selenium做模拟,如果是requests可以封装这个登录方法来获取登录后的cookies也是可以用的. 1 思路 先讲思路,分析流程 我们输入账号 ...

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

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

  8. (RPA)学习——谈谈关于“滑动”验证码与按照“语序”点击两类验证码

    为了大家近距离了解RPA,推出信用卡账单管理机器人,独立场景,独立使用,欢迎免费下载使用: http://fs.i-search.com.cn/setup/card1.0.0.13_csdn.exe ...

  9. 200行代码实现一个滑动验证码

    作者 | 崔庆才 转载自进击的Coder(ID: FightingCoder) 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还 ...

最新文章

  1. jsp中include指令和动作的区别
  2. All in one TFS 项目建立
  3. 解决The current branch is not configured for pull No value for key branch.master.merge found in config
  4. Spring源码由浅入深系列一 简介
  5. tcga癌症亚型获取_亚型多态性应用于元组的危险
  6. html4符合web的标准吗,在生成HTML,表格等时,CakePhp是否“符合标准”?
  7. 关于SQL SERVER 2000在Windows Server 2003下不能使用的问题
  8. 12佳精美的国外 Flash 网站模板下载(附源文件)
  9. 大数据技术_ 基础理论 之 数据挖掘与分析
  10. 堡垒机(运维审计系统)的基本原理与部署方式
  11. 2023年天津仁爱学院专升本报名确认缴费考试流程
  12. 【Windows】使用【老毛桃】PE系统进行Windows系统的镜像备份
  13. 01Linux之计算机硬件软件介绍
  14. [转帖]Tensor是神马?为什么还会Flow?
  15. 计算机课吐槽,让上课更有趣!这位老师的课学生可发弹幕提问吐槽
  16. 论文投稿-图片处理技巧
  17. 详解为什么v-if和v-for不能同时使用
  18. Python 空元组、空列表、空字典、空集合
  19. 单播、组播、广播三者之间的区别
  20. 英美国家时政与辩论辩题汇总

热门文章

  1. 使用FileZilla上传和下载远程Linux服务器文件
  2. debounce实现 js_js 实现一个debounce防抖函数
  3. 在笛卡尔坐标系上描绘函数(x*x+1)/(x*x-1)曲线
  4. 让java招聘人最心动的简历
  5. DeepLab v3+为啥可以封神?(论文讲解含超详细注解+中英文对照+配图)
  6. GDB调试多线程程序
  7. MEPG2 -TS小结
  8. table表格单元格的合并详解
  9. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月16日-7月22日)
  10. Jenkins+钉钉,实现Jenkins的构建结果直接发送到钉钉群