文章目录

  • 写在前面
  • 大致思路
  • Python实现
  • 几个小坑

写在前面

最近学习了滑动验证的一个破解思路,是利用OpenCV的图形匹配算法进行对比验证,从而推算出滑块移动的距离,在实际应用中比较常见,我主要参考了Bilibili的教程:[案例篇] selenium+openCV干掉滑动验证码,里面的老师讲解的很详细,不过视频中提到的网易易盾网站做了一些调整,不过其大体思路是一样的,调整后的代码实现我放在下面了,供有需要的朋友学习研究。

大致思路

  • 检查元素,观察网页结构,发现需要进行两次点击才能够到达滑动验证界面,其中的Xpath路径直接复制即可得到。
  • 提取待分析(匹配)的两张图片的链接,利用requests.get()方法直接保存图片到本地。
  • cv2库的imread()导入图片,进行灰度处理(使之变为单一图层)及空白去除。
  • 利用图像匹配算法计算匹配精度最高的点(滑块图片的左上角点)的坐标。
  • 利用ActionChains设定距离拖放,即可完成验证。

Python实现

主要用到的库是:

  • selenium:进行网页的自动化控制,点击以及拖放(拖放需要用到ActionChains
  • requests:下载滑动验证中用到的图片,方便之后的分析
  • cv2:进行两个图像灰度处理(提高效率)以及匹配
import cv2 as cv
import requests
import numpy as np
from time import sleep
from selenium.webdriver import Edge
from selenium.webdriver.common.action_chains import ActionChainsdef save_fig(web):slide_url = web.find_element_by_xpath('/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div/' \'div[2]/div[3]/div/div/div[2]/div/div/div[1]/div/div[1]/img[2]').get_attribute('src')slide = requests.get(slide_url).contentwith open('slide.png', 'wb') as f1:f1.write(slide)bg_url = web.find_element_by_xpath('/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div/' \'div[2]/div[3]/div/div/div[2]/div/div/div[1]/div/div[1]/img[1]').get_attribute('src')bg = requests.get(bg_url).contentwith open('bg.jpg', 'wb') as f2:f2.write(bg)if __name__ == '__main__':web = Edge(r"C:\msedgedriver.exe")web.get("https://dun.163.com/trial/sense")web.implicitly_wait(10)# 进入滑块验证界面web.find_element_by_xpath('/html/body/main/div[1]/div/div[2]/div[2]/ul/li[2]').click()sleep(1)web.find_element_by_xpath('/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]' \'/div[1]/div/div[2]/div[3]/div/div/div[1]/div[1]/span').click()sleep(1)# 保存图片save_fig(web)# 使用OpenCV导入图片为RGB矩阵格式bg = cv.imread('bg.jpg')slide = cv.imread('slide.png')# 利用openCV进行灰度处理bg = cv.cvtColor(bg, cv.COLOR_BGR2GRAY)slide = cv.cvtColor(slide, cv.COLOR_BGR2GRAY)# 处理滑块,去掉空白部分# 即对图像矩阵进行处理,去掉图像矩阵中值为0的部分(空白)slide = slide[slide.any(1)]# 进行图形匹配,使用精度最高的算法(速度较慢)result = cv.matchTemplate(bg, slide, method=cv.TM_CCOEFF_NORMED)# 提取匹配到的图像左上角坐标# 注意这里x表示纵坐标,y表示横坐标# `np.argmax`得到一维情形下的最大值,需要转化成二维x, y = np.unravel_index(np.argmax(result), result.shape)# 定位滑块位置web_slide = web.find_element_by_xpath('/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[2]/div[1]' \'/div/div[2]/div[3]/div/div/div[2]/div/div/div[2]/div[2]')# 进行拖放操作# 注意横向移动距离整除1.01# 因为原始图片在网页中进行了一定比例的缩放ActionChains(web).drag_and_drop_by_offset(web_slide, xoffset=y/1.01, yoffset=0).perform()

几个小坑

  1. 要注意OpenCV中的图像宽高分别对应矩阵的列数与行数,所以得到的坐标中x与y是反的。
  2. 要注意ActionChians中的拖动距离,需要除以一个略大于1的数,因为网页中的图片经过CSS样式调整,有了一定比例的缩放。但是我发现在拖动距离未达到背景图宽度的一半时不设置缩放也可以验证成功。
  3. OpenCV的图像匹配算法不能保证每次都验证成功,实际运用中需要多次验证。
  4. 有的网站可能会设置机器识别,即如果只是使用selenium的匀速拖放,可能会被识别为机器,此时可以设置拖放速度,使得其拖放行为与人的操作更加相似。

selenium自动化案例(二)滑动验证码破解相关推荐

  1. Selenium自动化案例

    Selenium自动化案例 简单说明:最近学习了一下python爬虫,然后这是涉及到的其中一门技术,提功能强大,这只是个简单案例,都实现了自动百度的功能,结合其他的会更加的自动,更利于开发. Sele ...

  2. 验证码破解:极验3.0滑动验证码破解最新俩种方法

    特点: 对于极验验证码3.0版本,我们首先点击按钮进行智能验证.如果验证不通过,则会弹出滑动的验证的窗口,拖动滑块拼合图像进行验证.之后三个加密参数会生成,通过表单提交到后台,后台还会进行一次验证. ...

  3. 【2019.05】极验滑动验证码破解 geetest

    [极验测试站]https://www.geetest.com/demo/slide-popup.html 滑动验证码如下图 破解滑动验证码一般都是得到验证码的原图和有滑块的图,这里我们抓包发现极验的原 ...

  4. selenium自动化案例(一)B站专栏爬虫

    文章目录 写在前面 案例分析 代码实现 写在前面 前几天学习了selenium自动化以及CSS.Xpath元素定位,想着找个网站练练手,不用登录的B站就是个不错的选择,下面以B站的校园学习专栏为例进行 ...

  5. selenium + Chrome 滑动验证码破解三之京东 实现某东登录

    之前爬取模拟登录B站和模拟春秋官网的注册验证码,问题都不大.所以今天想挑战下某东,对于稍微有些爬虫基础的来说脚本到登录界面应该都没什么问题,这部分就直接上代码了哈 1.最先开始到输入账号密码,点击登录 ...

  6. 极验验证的滑动验证码破解

    最近在搞爬虫的时候在好几个网站都碰到了一种叫做geetest的滑动条验证码,一直没有太好的办法只能在触发这个验证码后发个报警去手动处理一下.http://www.geetest.com/exp_emb ...

  7. Python爬虫 | 滑动验证码破解

    极验验证码:需要手动拼合滑块来完成的验证,相对图形验证码识别难度上升了几个等级.下面用程序识别并通过极验验证码的验证,其中有分析识别思路.识别缺口位置.生成滑块拖动.模拟实现滑块拼合通过验证等步骤.需 ...

  8. 怎么用python自动注册_python selenium自动化(二)自动化注册流程

    需求:使用python selenium来自动测试一个网站注册的流程. 假设这个网站的注册流程分为三步,需要提供比较多的信息: 在这个流程里面,需要用户填入信息.在下拉菜单中选择.选择单选的radio ...

  9. 极验滑动验证码破解分析

    来自知乎文章 极验验证码验证的是鼠标拖动滑块时的鼠标轨迹,完整步骤就像这样:先向目标网站请求一个id,然后拿着id去geetest服务器请求图片:接下来就开始拖动滑块,拖动的过程会被js记录下来:松开 ...

最新文章

  1. AI在软硬件开发中的应用落地!
  2. 最完整代码的用php备份mysql数据库
  3. evaluate函数使用无效_在Matlab中使用tensorflow (2)
  4. 毕业论文 | 基于脉冲耦合神经网络(PCNN)的图像特征提取:论文及源代码及参考文献
  5. 以太坊智能合约 编译脚本
  6. 八大排序算法的python实现(三)冒泡排序
  7. aliyun托管kubernetes部署postgress
  8. matlab 行 读取文件 跳过_Matlab调试:跳过下一行而不执行
  9. devc 能优化吗_小网站能做seo优化吗?如何为小公司网站做seo优化?
  10. shark恒破解笔记2-绕过自校验
  11. 在360与腾讯过家家时,我们该醒醒了
  12. banner定制网站
  13. 《Scrum实战》第2次课【取得大家的支持】课后作业汇总
  14. 两用图片视频压缩软件
  15. 9月17日服务器维护,《海岛纪元》9月17日维护公告 「失落之城」正式开服
  16. 关于“源代码未编译“问题的回复
  17. Linux下C程序调用库函数实现重启
  18. Nginx代理——正向、反向代理,动静分离和负载均衡
  19. 52. 常用的数学工具类9-大乐透号码生成器
  20. 火鸟字幕合并器V0.5 Build2006.5.9正式发布,下载地址不变

热门文章

  1. 修改npm安装的全局路径和配置环境变量的坑
  2. hadoop-02-关闭防火墙
  3. 七步从Angular.JS菜鸟到专家(1):如何开始【转】
  4. 温故而知新 C++ 类型转换
  5. Wcf for wp8 创建wcf服务 连接wp8模拟器并显示来自wcf服务的接口信息 (一)
  6. 方案改进:直接通过User Control生成HTML
  7. MNIST数据集处理
  8. hhvm php5.6,PHP_5.5_/_PHP5.6_/_PHP-NG_和_HHVM_哪个性能更好?
  9. 【连载】如何掌握openGauss数据库核心技术?秘诀一:拿捏SQL引擎(2)
  10. 想了解 spring-cloud-kubernetes,那就先来实战一把官方demo