python完成滑动拼图验证码破解
滑动拼图验证码是滑动验证码的进阶版,主要是多了缺口位置,需要我们准确定位缺口位置,并将滑动按钮移动到相应的位置,滑动拼图验证分为两种,一种是能用元素选择工具定位缺口位置的,一种是无法用元素选择工具定位的缺口位置的,能够用元素选择工具选中缺口的滑动拼图验证,其原理与之前的滑动验证差别不大,思路为:定位滑动按钮大小,定位缺口位置,相减后利用selenium移动,完成验证。
本次,我们主要完成的是无法用元素选择工具定位的滑动拼图验证。
面对无法用元素选择工具定位的滑动拼图,我们使用的是PIL库的ImageChops对图像进行对比,以此确定定位缺口位置,首先,我们获取原始图片和缺口图片以便对它们进行对比,代码如下:
browser.find_element(by=By.XPATH,value='//*[@id="jigsawCanvas"]').screenshot('origin.png') # 获取原始图片slider = browser.find_element(by=By.XPATH,value='//*[@id="jigsawCircle"]') # 获取滑动按钮
slider.click() # 先模拟点击下,方便下面获取到有缺口的图片
browser.find_element(by=By.XPATH,value='//*[@id="jigsawCanvas"]').screenshot('after.png') # 获取有缺口的图片
之后我们通过PIL库的ImageChops的difference方法识别两张图片的区别并通过getbbox()函数返回坐标位置,以此确定缺口元素坐标,代码如下:
image_a = Image.open('origin.png').convert('RGB') # 打开原始图片
image_b = Image.open('after.png').convert('RGB') # 打开有缺口的图片
x = ImageChops.difference(image_a, image_b).getbbox() # 比较两个图片的差别
print(x) # 举个例子:倘若x为:(226, 103, 277, 154);返回缺口对应的左边横坐标(由左往右看),上边纵坐标(由上往下看),右边横坐标,下边纵坐标
distance = x[0] # 第一个元素x[0]表示的就是缺口左边横坐标,也就是滑块需要移动的距离
print(distance) # 如果例子为:(226, 103, 277, 154),那么需要移动的距离为226
获取到坐标后我们只需让他与滑动按钮相减确定滑动距离后利用selenium操纵鼠标滑动按钮即可完成验证,完整代码如下:
from selenium import webdriver
import os
import time
from PIL import Image, ImageChops
from selenium.webdriver.common.by import By# 1.访问网址
browser = webdriver.Chrome()
# url = r'E:\验证码反爬\高级滑动拼图验证码\index.html' # 自己用的话可以直接写这样的固定路径
current_dir = os.path.dirname(os.path.abspath(__file__)) # 获取代码所在的文件夹目录
url = current_dir + '/index.html' # 获取HTML文件的文件绝对路径
print('此时的文件路径为:' + url) # 打印此时的文件路径,所以如果文件位置固定,可以直接写url = r'文件路径'
browser.get(url) # 访问网址
time.sleep(2)# 2.获取原始图片
browser.find_element(by=By.XPATH,value='//*[@id="jigsawCanvas"]').screenshot('origin.png') # 获取原始图片# 3.获取有缺口的图片
slider = browser.find_element(by=By.XPATH,value='//*[@id="jigsawCircle"]') # 获取滑动按钮
slider.click() # 先模拟点击下,方便下面获取到有缺口的图片
browser.find_element(by=By.XPATH,value='//*[@id="jigsawCanvas"]').screenshot('after.png') # 获取有缺口的图片# 4.比较两幅图片的区别,获取需要移动的距离
image_a = Image.open('origin.png').convert('RGB') # 打开原始图片
image_b = Image.open('after.png').convert('RGB') # 打开有缺口的图片
x = ImageChops.difference(image_a, image_b).getbbox() # 比较两个图片的差别
print(x) # 举个例子:倘若x为:(226, 103, 277, 154);返回缺口对应的左边横坐标(由左往右看),上边纵坐标(由上往下看),右边横坐标,下边纵坐标
distance = x[0] # 第一个元素x[0]表示的就是缺口左边横坐标,也就是滑块需要移动的距离
print(distance) # 如果例子为:(226, 103, 277, 154),那么需要移动的距离为226# 5.开始滑动!
action = webdriver.ActionChains(browser) # 启动Selenium的动作链
action.click_and_hold(slider).perform() # 按住滑动按钮不松开
action.move_by_offset(distance-10, 0) # 开始滑动!这里-10,是把初始圆角矩形左侧left属性值给减去了,这样更准确
action.release().perform() # 释放滑块
python完成滑动拼图验证码破解相关推荐
- 爬虫之极验验证码破解-滑动拼图验证码破解
滑动拼图验证码破解 前言 步骤分析 第一步,获取原图 第二步 拼接图片 第三步 计算豁口所在位置 第四步 计算拖动距离 模拟拖动 其他 前言 滑动验证码已经流行很多年了,我们在这里尝试一下如何实现滑动 ...
- Python实战 | 滑块拼图验证码高级版详解
目录 1.如何实现滑块拼图验证码高级版? 2.HTML代码: 3.Python代码: 4.执行后报错,解决方案: 5.完整代码,修改后如下: 1.如何实现滑块拼图验证码高级版? 2.HTML代码: & ...
- 滑动拼图验证码操作步骤:_拼图项目:一个不完整的难题
滑动拼图验证码操作步骤: 马克·雷因霍尔德(Mark Reinhold)最近提议延迟Java 9,以花更多的时间完成项目Jigsaw,这是即将发布的版本的主要功能. 虽然这个决定肯定会使Java的厄运 ...
- 滑动拼图验证码操作步骤:_拼图项目:延期的后果
滑动拼图验证码操作步骤: Mark Reinhold先生于2012年7月宣布 ,他们计划从Java 8撤消Jigsaw项目 ,因为Jigsaw计划于2013年9月(从现在开始一年)推迟其发布. 这个日 ...
- uniapp、vue实现滑动拼图验证码
实际开发工作中,在登陆的时候需要短信验证码,但容易引起爬虫行为,需要用到反爬虫验证码,今天介绍一下拼图验证码,解决验证码反爬虫中的滑动验证码反爬虫. 原理 滑动拼图验证码是在滑块验证码的基础上增加了一 ...
- js php滑动拼图解锁,js 滑动拼图验证码
以前的验证码很简单,就是一个带些背景色或背景图和干扰线的纯数字字母类的验证码,现在已经发展变得很丰富了.我见过的就有好几种:纯字母数字类,数学计算类,依次点击图片上的文字类,从下列图片列表里选取符合描 ...
- 滑动拼图验证码 免费 java_js+canvas实现滑动拼图验证码功能
上图为网易云盾的滑动拼图验证码,其应该有一个专门的图片库,裁剪的位置是固定的.我的想法是,随机生成图片,随机生成位置,再用canvas裁剪出滑块和背景图.下面介绍具体步骤. 首先随便找一张图片渲染到c ...
- Android 滑动拼图验证码控件
Android 滑动拼图验证码控件 简介: 很多软件为了安全防止恶意攻击,会在登录/注册时进行人机验证,常见的人机验证方式有:谷歌点击复选框进行验证,输入验证码验证,短信验证码,语音验证,文字按顺序选 ...
- 小视频app源码,Android 滑动拼图验证码控件
小视频app源码,Android 滑动拼图验证码控件 代码实现: 滑块视图类:SlideImageView.java.实现小视频APP源码随机选取拼图位置,对拼图位置进行验证等功能. public c ...
- php滑动拼图验证,JS怎么实现滑动拼图验证码
这次给大家带来JS怎么实现滑动拼图验证码,JS实现滑动拼图验证码的注意事项有哪些,下面就是实战案例,一起来看一下. 上图为网易云盾的滑动拼图验证码,其应该有一个专门的图片库,裁剪的位置是固定的.我的想 ...
最新文章
- iOS 开发 OC编程 字典和集合 排序方法
- python 调用linux命令-python3调用linux命令——Subprocess
- MySQL高级知识(十五)——主从复制
- ospf序列号等问题
- golang type 说明和使用
- Kafka系列之-Kafka监控工具KafkaOffsetMonitor配置及使用
- Spark学习-SparkSQL--04-SparkSQL CLI 单节点运行与yarn集群运行
- 对称加密和非对称加密转载
- iOS开发——自定义下拉框
- SQL2005中row_number( )、rank( )、dense_rank( )、ntile( )函数的用法(2)
- 网优5g前景_网优行业的吐槽,附吐槽记录
- Swing 显示良好JPanel保存为图片
- 7 centos 查看程序文件数量_MongoDB最大连接数(centos7应用程序最大打开文件数)设置失效的异常分析过程与解决方法...
- Python实现桌面程序:PyQt5 + QtDesigner -- 界面设计与逻辑编写
- 解决“配置系统未能初始化”异常
- 欢迎中文社区新版主@刘文艺
- 巴比特独家丨从0.06%飙涨到30%,BAT在Compound的利率飙涨背后实际危机四伏
- DataSource和SessionFactory的区别
- 金融行业IT运维现状问题和发展方向
- 【论文笔记】Towards Privacy-Preserving Affect Recognition: A Two-Level Deep Learning Architecture
热门文章
- 阿里海量大数据平台的运维智能化实践
- 微信中调用扫一扫最简便的方法 5行代码实现H5扫一扫 HTML5扫二维码最简便的办法
- EXCEL保存“加载宏”
- mouseenter和mouseleave跟mouseover和mouseout
- 2019年最新web前端笔试题
- 微信公众号php支付设置回调,php微信公众号支付讲解(JSAPI)
- SPSS调节效应分析插件 v1.1.1
- 数字城市新型基础设施——打造以“运营与安全并重”为特色的新型数字空间
- 任玉刚【Android开发艺术探索】读后笔记一
- 元分析教程 | 手把手教你使用CMA 2.0