22、关于破解滑动的验证码
以破解猪八戒网为例*https://account.zbj.com/login**
获取图片验证码,包含缺口图,滑块图,完整图
三个canvas标签分别对应了缺口图,滑块图和完整图。
通过修改页面样式:
- 让滑块隐藏,截取缺口图;
- 隐藏缺口图,显示滑块图,截取滑块图;
- 显示完整图,截取完整图。
1.隐藏滑块,截取缺口图
设置后效果
2.隐藏缺口图,显示滑块图,截取滑块图
隐藏缺口图
下滑右侧栏可以看到对滑块的设置
3.显示完整图,截取完整图。
选择第三个canvas
代码更改元素样式,获取图片
- 功能:获取验证图片
- 参数:无
- 返回值:
缺口图地址
滑块图地址
完整图地址
def get_captcha():time.sleep(2)#(1)隐藏滑块 得到缺口图js_hide_slice = 'document.getElementsByClassName("geetest_canvas_slice")[0].style.display="none"'driver.execute_script(js_hide_slice)#截取缺口图part_imgpath="./part.png"driver.find_element_by_class_name("geetest_canvas_bg").screenshot(part_imgpath)# (2)显示滑块 隐藏缺口图 得到滑块图js_show_slice = 'document.getElementsByClassName("geetest_canvas_slice")[0].style.display="block"'js_hide_part= 'document.getElementsByClassName("geetest_canvas_bg")[0].style.display="none"'driver.execute_script(js_show_slice+";"+js_hide_part)# 截取滑块图slice_imgpath = "./slice.png"driver.find_element_by_class_name("geetest_canvas_slice").screenshot(slice_imgpath)# (3)显示完整图js_show_full1 = 'document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display="block"'js_show_full2 = 'document.getElementsByClassName("geetest_canvas_bg")[0].style.opacity="1"'driver.execute_script(js_show_full1+";"+js_show_full2)# 截取完整图full_imgpath = "./full.png"driver.find_element_by_class_name("geetest_canvas_fullbg").screenshot(full_imgpath)#还原 目的 还原成原来的模样 包含缺口图与滑块js_hide_full1 = 'document.getElementsByClassName("geetest_canvas_fullbg")[0].style.display="none"'js_hide_full2 = 'document.getElementsByClassName("geetest_canvas_fullbg")[0].style.opacity="0"'js_show_part = 'document.getElementsByClassName("geetest_canvas_bg")[0].style.display=""'driver.execute_script(js_hide_full1 + ";" + js_hide_full2+ ";"+js_show_part)return part_imgpath,slice_imgpath,full_imgpath
计算距离
计算缺口位置,滑块位置,滑块要移动的距离
确定距离
距离=滑块左边缘与缺口左边缘之间的距离
distance=滑块左边缘X坐标-缺口左边缘X坐标
代码演示
计算距离代码 滑块左边缘X坐标 缺口左边缘X坐标
模拟人工移动
通过算法模拟人工移动的轨迹
- 直接根据获取到的距离移动,滑块与缺口能够契合,但是不能通过
- 牛顿运动定律模拟人工移动,偶尔有通过,概率低;
- 增加随机性模拟人工移动轨迹,通过概率高
直接根据距离移动
直接移动
牛顿运动定律构造轨迹
拖动时的速度要平滑变化,开始变快,后来变慢,最后可能拖过头然后回拖,则速度可能为负,抛物线只是一种方案,轨迹方案体现出开发者对自己拖动滑块时速度变化的理解。
这里可能要稍微用一点高中的物理知识,不知道大家还能不能回忆起来。下面这张图横坐标是t就是时间,纵坐标是v就是速度,那么在这张图里用来表示加速度的应该是什么啊,就应该是这条抛物线上每个点在这条线上的切线的斜率对吧,这个应该还是能理解的吧。
非匀变速 匀变速
代码实现
获取运动轨迹 获取运动轨迹 获取运动轨迹
增加运动随机性
增加运动随机性
selenium操作
移动滑块
移动滑块代码实现
移动卡顿问题
代码在运行的过程中可能会出现卡顿的问题,解决方法是修改pointer_input.py文件中的DEFAULT_MOVE_DURATION的值,把这个值改小一点,这个值的主要作用是控制花费多少毫秒来完成移动鼠标的动作。
路径:C:\ProgramData\Anaconda3\envs\spider\Lib\site-packages\selenium\webdriver\common\actions\pointer_input.py
移动卡顿问题解决
总结
- 获取验证码图片,包含缺口图,滑块图,完整图
- 计算缺口位置,滑块位置,滑块要滑动的距离
- 通过算法模拟人工移动轨迹
- 通过selenium模拟操作
22、关于破解滑动的验证码相关推荐
- 爬虫之极验验证码破解-滑动拼图验证码破解
滑动拼图验证码破解 前言 步骤分析 第一步,获取原图 第二步 拼接图片 第三步 计算豁口所在位置 第四步 计算拖动距离 模拟拖动 其他 前言 滑动验证码已经流行很多年了,我们在这里尝试一下如何实现滑动 ...
- 用Python爬虫破解滑动验证码
我们可以借用opencv来解决这个问题,主要步骤: opencv 是什么? OpenCV(Open Source Computer Vision Library)是开放源代码计算机视觉库,主要算法涉及 ...
- Python破解滑动验证码(极验/无背景图)
在使用Python突破人机验证时,验证码乃第一大关卡.本文针对破解滑动验证码展开分析.对于能够直接获取滑块小图与背景图的滑动验证码,通过使用cv2模块的matchTemplate函数,可以准确地计算出 ...
- 如何破解滑动验证码?
本文通过自动化查询域名或公司的备案信息,来演示其中图片滑动验证码的破解方式,以此来思考验证码的安全性问题,思考如何设计出安全性更高的验证码. 注意:破解验证码进行网络内容抓取可能是一种违规行为,可以以 ...
- 破解滑动验证码,成功率在百分之九十九
破解滑动验证码 使用python破解滑动验证码后获取cookie, 用于爬取数据,这里是获取到cookie存到redis,不费话了,上代码 import re import redis from se ...
- Python破解12306图片验证码
不知从何时起,12306的登录验证码竟然变成了按字找图,可以说是又提高了一个等次,竟然把图像识别都用上了.不过有些图片,不得不说有些变态,图片的清晰图就更别说了,明显是从网络上的图库中搬过来的. 谁知 ...
- 爬虫入门经典(十九) | 难度提升,破解极验验证码
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...
- 滑动拼图验证码操作步骤:_拼图项目:一个不完整的难题
滑动拼图验证码操作步骤: 马克·雷因霍尔德(Mark Reinhold)最近提议延迟Java 9,以花更多的时间完成项目Jigsaw,这是即将发布的版本的主要功能. 虽然这个决定肯定会使Java的厄运 ...
- 滑动拼图验证码操作步骤:_拼图项目:延期的后果
滑动拼图验证码操作步骤: Mark Reinhold先生于2012年7月宣布 ,他们计划从Java 8撤消Jigsaw项目 ,因为Jigsaw计划于2013年9月(从现在开始一年)推迟其发布. 这个日 ...
最新文章
- Keep Walking!
- java随机生成10个不重复的数字,随机生成10个不重复的0-100的数字(实例讲解)
- [组件] TopN 排行榜
- 屌丝就爱尝鲜头——java8初体验
- Python函数学习
- python接口自动化(三十二)--Python发送邮件(常见四种邮件内容)番外篇——上
- 春节期间的学习小目标
- Linux 下 Weblogic 的安装 、配置以及发布
- oneno浏览器插件_onenote 插件-onenote clipper for chrome下载 v2.1.3官方版--pc6下载站
- Java之美[从蛮荒到撬动地球]之设计模式三
- 蓝桥杯练习------python字符串逆序
- 威廉玛丽大学计算机本科专业,威廉玛丽学院本科专业有哪些?
- 《使命召唤》手游滑铲怎么释放?什么时候使用滑铲更好?
- java实现发送手机验证码功能
- w10计算机怎么恢复出厂设置路由器,win10无线路由器设置步骤图_win10重置路由器后怎么设置...
- 没有金三银四,又要迎接所谓的金九银十,今年大环境这么差,Java岗必备面试题及答案学习还是得学
- 模拟退火算法及常见应用
- 正则表达式替换字符串中的${}里面的数据
- AI每日小练习之磨砂玻璃质感图标
- 2018年工科生推免保研经历记录(含西交,上交,北航,浙大和清华等)
热门文章
- TensorFlow 机器学习秘籍第二版:1~5
- audio 上一首 下一首 自定义样式_请问我下面的js代码点击下一首按钮的时候怎么播放下一首...
- java的session问题
- lua把userdata写入mysql_Lua 之 userdata
- 大学“电路分析基础”试题合集第七章
- 学习python的第一步
- M302A-CW/BYT-通刷S905L3(B)-当贝纯净桌面卡刷固件包
- LRU 缓存机制实现:哈希表 + 双向链表
- android编译命令及.mk文件浅析
- 尚硅谷云原生学习笔记(1-75集)