无AI滑块验证码破解过程

腾讯QQ空间滑块验证码的思路(仅限没有人工AI识别的网站)
bg.png 是已经下载下来的带缺口的背景图
block.png 是缺口小图(即滑块)
切换到新的iframe是switch_to.frame(),括号里填ifame的id

import cv2

def deal_pic():
	# 读取带缺口的背景图片(原图非网页显示图片大小)
	bg_rgb=cv2.imread('./bg.png')
	# 计算背景图原图的尺寸
	w1 = bg_rgb.shape[1]
	# 图片进行灰度处理
	bg_gray=cv2.cvtColor(bg_rgb, cv2.COLOR_BGR2GRARY)
	# 读取缺口图片(原图大小非网页显示大小)
	block_rgb = cv2.imread('./block.png')
	# 匹配缺口模块的位置(把缺口图片和灰度处理后的背景图片进行匹配<在背景图中找缺口图>,会得到一系列的值。)
	res= cv2.matTemplate(bg_gray, block_rgb, cv2.TM_CCOEFF_NORMED)
	# 最后获取最佳与最差匹配
	value= cv2.minMaxLoc(res)
	# 取出偏移量
	x = value[2][0]
	# print(value) (-0.8425560593605042, 0.41289904713630676, (458, 157), (294, 203))
	# value中的458就是左边界到背景图缺口的位置的偏移量。(原图的偏移量,实际显示的验证码图是按比例缩小的)

在这里插入图片描述

下载下来的bg.png是原图,没有缩小的。按F12在验证码图片右键检查可以看到图片的显示的大小为原图的一半,(各个网站比例可能不一样),网页显示的图片大小为341x195,实际大小为680x390
网页显示的实际大小

# 只带缺口的背景图,网页显示的实际大小(不用urlretreive下载下来的话,就是网页显示的实际大小)
bg2 = drive.find_element_by_xpath('//*[@id="slideBg"]')
w2 = bg2.size['width']

得到实际的偏移量

x_offset = x*w2/w1
x_offset = 458*195/390 = 229

这个偏移量是从背景图左边界到缺口处左边界的距离229,因为缺口图四周还有透明的马赛克,所以实际229是到马赛克左边边界的距离
在这里插入图片描述
所以最终的偏移量是:
x_offset =1 + 2 - 3 (箭头标识处)
2的宽度:因为原图是136x136,网页上是56x56,又因为网页上是原图按2:1缩放的,所以网页上的是原图的一半,所以2的宽度为(136/2-56)/2 = 6
3的宽度:这个是直接用QQ截图截出来的,32个像素。(如果电脑是按100%显示的话,截出来多少个像素就是多少个像素,如果是按125%显示,32/1.25=?,就是这个结果)
所以x_offset = 229 +6-32 = 203
找到偏移量后就简单了直接用selenium拖动操作就行。因为没有AI识别,所以不用更改滑动速度那些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值