python处理滑块验证的轨迹计算问题
在上一回中说了五行代码找图中滑块验证的缺口位置《python五行代码解决滑块验证的缺口距离识别,破解滑块验证》,本章讲轨迹相关的问题。
滑块验证核心是后台验证轨迹参数,效验轨迹取点的分布,正常情况是如下图的离散分布
如果横坐标x是时间、纵坐标y是位移,那么每个点的切线就是加速度,会发现这样的一个规律,加速度由小变大,再又大变小,这是最主要的特征之一。
速度的变化率如下:
对速度而言肯定是先加速在减速,但加速度不会是固定的,应该是变变加速和变变加速,不过目前实际应用中的情况来说,是以速度变化情况为主要判别依据,因为在以恒加减速度生成的轨迹应用中一样可以通过检测,就说明目前没有对是否恒定加速度来鉴别机器和人工。
知道上面的两点后我们就应该明白滑块验证的关键,并且可以预测它的下一步优化方式将是对加速度变化的验证,收集了两种轨迹生成方式:一种是以加减速为主的物理学生成方式,另一种是根据轨迹离散分布生成的数学生成。
def generate_tracks(S):
"""
:param S: 缺口距离Px
:return:
"""
S += 20
v = 0
t = 0.2
forward_tracks = []
current = 0
mid = S * 3 / 5 # 减速阀值
while current < S:
if current < mid:
a = 2 # 加速度为+2
else:
a = -3 # 加速度-3
s = v * t + 0.5 * a * (t ** 2)
v = v + a * t
current += s
forward_tracks.append(round(s))
back_tracks = [-3, -3, -2, -2, -2, -2, -2, -1, -1, -1]
return {'forward_tracks': forward_tracks, 'back_tracks': back_tracks}
传入距离S,先加上20的距离然后在生成轨迹中再减去20,达到超过缺口在回滑的效果,以固定周期0.2秒来计算轨迹和速度。
def ease_out_quad(x):
return 1 - (1 - x) * (1 - x)
def ease_out_quart(x):
return 1 - pow(1 - x, 4)
def ease_out_expo(x):
if x == 1:
return 1
else:
return 1 - pow(2, -10 * x)
def get_tracks(distance, seconds, ease_func):
tracks = [0]
offsets = [0]
for t in np.arange(0.0, seconds, 0.1):
ease = globals()[ease_func]
offset = round(ease(t/seconds) * distance)
tracks.append(offset - offsets[-1])
offsets.append(offset)
return offsets, tracks
这种方式是从时间出发,在假设匀速的情况下,把时间分割成一段一段的,每段都对应一个轨迹,那么这个轨迹先大后小如下:
[0, 0.0, 21.0, 16.0, 13.0, 10.0, 9.0, 6.0, 5.0, 4.0, 4.0, 2.0, 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]
目前这两种轨迹都是可行的,能够通过腾讯的滑块验证。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python另类处理Google和12306的图形验证
随着反爬虫的深入,后来不仅有滑块验证,还出现了点选验证、图形验证、汉字图形验证、其中较为知名的是Google的图形验证和12306的图形验证,以及知乎出现的倒立汉字验证。 应对图形验证的方式除了对接专业的验证平台以外,我们还可以通过处Email、微信将图片发给自己来选择点击位置,今天就分享如何方便自己点击选择。 下面是一张12306图形验证码 遇到这种情况,在大型项目中一般直接对接专业处理平台,在小项目中就自己点选了,但是无界面模式下又怎么选择?那当然是通过邮件或者微信发送到手机,即使受到了验证码也很难做出处理。 但是将上面的图片处理一下做成下面的样子: 直接在微信回复图片中的编码,每个编号中间的十字光标就是选择该编号后会点击的坐标。同时可以定义图片分割的大小,可以分割得更加密集或者更加稀疏。 每个单元格就像一个像素位置,只是不同的是我们只需要说出编号,让程序自动找到坐标来点击。 代码如下: fromPILimportImage fromPILimportImageDraw,ImageFont defimages(file,n,m): """:paramfile:图片路径:paramn...
- 下一篇
利用jvisualvm分析JVM,进行性能调优
什么是jvisualvm? jvisualvm是JDK自带分析工具。 可分析JDK1.6及其以上版本的JVM运行时的JVM参数、系统参数、堆栈、CPU使用等信息。可分析本地应用及远程应用。 在JDK1.6以上版本中自带。 工具在哪找? 在jdk包中:%JAVA_HOME%binjvisualvm.exe 怎么用? 1.进入JVM进程 进入工具后,在工具左侧即可选中当前运行的JAVA进程,双击可查看进程详情。 2.查看运行环境及JVM参数 3.查看JVM垃圾回收、进程等 主要是为了查看垃圾回收次数,频繁的垃圾回收对系统性能也有影响。 4.分析应用性能 利用这个工具分析应用性能效果杠杠的,主要是利用抽样器统计每个线程中,每个方法的执行时间,这样就能看到一次请求过程中,到底是哪个方法/查询导致响应时间长。 4.1点开抽样器,点击CPU,进行CPU抽样 4.2抽样一段时间后,点击快照,对从点击抽样开始的这段时间,进行CPU使用的统计。 4.3然后就能看到这段时间里,每个方法被使用的总时间以及时间占比啦,调用堆栈可一直追踪至native方法。这样就可以很轻松的分析出,到底是哪个方法占了我宝贵的时...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度