应该是独创吧,反正没人跟我一样,就是速度有点慢(1分钟左右),而且成功率不是百分百,分享一下,百度了一下,五花八门,大多数讲的不详细,要么太高深,人工智能训练,灰度化图片,按键精灵好像不能够实现吧,自己研究研究吧。

QQ图片20190217141045.gif

先找到一个有滑动验证码的app,百度了一下,就是斗鱼了。
斗鱼登陆界面->忘记密码里面->手机号找回

QQ截图20190217122806.png

分析特征,找到思路再来写代码。
粗略说下思路再仔细分解,1。分析要滑动的图片的高度,就是纵坐标位置,2,分析要滑动的图片的横位置,3,空缺的位置,4,滑
第一步确认要滑动的图片的最上面的Y坐标。最下面的Y坐标,就是高度,以确定要滑动的图片中线在哪里,找中心就是确定要滑动的图片具体的位置在哪里。
模拟器分辨率设置如图,首先科普一下X坐标是横着的,Y坐标是纵的,最左上角的坐标是0,0。先确定整个图片的大小,等下要用,左上角是140,381,右下角是399,540,得出结论,这个图片高度是540-381=159。

QQ截图20190217124103.png

QQ截图20190217123805.png

QQ截图20190217124042.png

找到要移动图片的规律,我找到的规律就是图片周围有点黑。有点黑怎么用脚本表达呢?用到按键精灵两个命令综合运用,GetPixelColor和ColorToRGB。GetPixelColor是获取指定颜色,ColorToRGB是分解颜色成RGB,黑色的RGB是#000000。
接下来写一个函数
[Asm] 纯文本查看 复制代码
Function sumc(x, y)
// 获取指定点颜色
rColor = GetPixelColor(x, y, 0)
//分解成RGB三个值
ColorToRGB rColor, r, g, b
//计算三个值得和,后面获取很多的点的分解成RGB三个值和对比
res= r+g+b
End Function

这个函数的内容是计算某个点的RGB的三个值和
接下来找到要移动的图片的上限在哪里,就是Y坐标值
可以从图片中看出来这个图片的总是在按钮的正上方,横坐标是160,遍历这条线上所有的点的RBG值,和最小的地方就是要移动的图片的最上面的地方(大多数是最上面,有时候会找的是最下方,这就是为什么不会百分百成功,等下会做下判断),这条线多长呢?就是最开始找的图片Y范围,整个图片的左上角位置的Y坐标到右下角的Y坐标值。381到540。

QQ截图20190217125620.png

写代码

[Asm] 纯文本查看 复制代码
//取最上面的点的RGB三个点的值
sumc (160, 381)
mix = res
For i = 381 To 540
sumc 160, i
// 依次对比,比取第一点还小,就更新一下最小值,遍历完成就找到了最小值。
If mix > res Then

mix = res
// 找打的最小的值对应的i值就是要找的最黑的地方的Y坐标值,也就是要移动的图片最上面的地方
mixr = i
End If
Next

Dim mtop= mixr
TracePrint "要移动的图片的上限Y坐标"&mtop

第二步,图片最上面的坐标找到,接下来找最下面,最下面,就好找点,不会遍历381到540的范围,而是根据测量最下边的Y的坐标范围是最上边的Y坐标+40到最上边的Y坐标+120,(如果上一步刚找到的坐标是最下边,那么最上边的Y的坐标范围是最上边的Y坐标-120到最上边的Y坐标-40)

QQ截图20190217132037.png

QQ截图20190217132339.png

写代码
[Asm] 纯文本查看 复制代码
fx1 = mtop +40
fx2 = mtop+120

sumc (160, fx1)
mix = res

For i = fx1 To fx2
sumc (160, i)
If mix > res Then
mix = res
mixr = i
End If

Next
TracePrint "要移动的图片的下限Y坐标"&mixr
Dim mlow = mixr

mali = Fix((mtop+mlow)/2)
TracePrint "要移动的图片中线坐标Y坐标"&mali

现在求到要移动的图片中线坐标Y坐标,在求这条中线上要移动的图片最左边X坐标。要移动的图片最左边X坐标的范围是140到140+30=170的范围内,在这个范围内找最黑的地方,这个绝对没错的,140是最开始测得的整个图片左上角的横坐标X的值,170看图就知道了。

QQ截图20190217134022.png

代码如下
[Asm] 纯文本查看 复制代码
sunc (140, mali)
mix = res
For i = 140 To 170
sunc (i,mali)
If mix > res Then
mix = res
mixr = i
End If
Next
h1=mixr
TracePrint "要移动的图片最左边X坐标"&mixr

第三步,找到空缺位置,空缺图片的X位置在140+50=190到399的位置,在这个范围内找最黑的地方,(这个地方可能会出错,也就是可能会识别要移动的图片突出的地方,这个范围可能会识别到要滑动的图片突出的地方,或者找到空缺的最右边的地方,这些例外几率比较小,暂时没有找打什么好的解决办法)

QQ截图20190217135249.png

写代码
[Asm] 纯文本查看 复制代码
sumc (190, mali)
mix = res
For i = 190 To 399
sumc (i,mali)
If mix > res Then
mix = res
mixr = i
End If
Next
h2=mixr
TracePrint "空缺的位置的最左边X坐标"&mixr

最后一步就是移动,按键精灵最简单的Swipe命令式不能使用的,app会判断是机器操作还是人工操作,因为Swipe命令滑动的过程不是一个人能滑出来的,很快很匀速。所以要用到紫猫插件的超级滑动命令,所有的参数都要用上,才能正真的识别成人工滑动的

QQ截图20190217140832.png

[Asm] 纯文本查看 复制代码
moveto = h2-h1
TracePrint "要移动的距离为"&moveto

zm.Swipe (154, 825, 154+moveto, 825,200,3,-100,-1,true)

总结一下一下,所有代码,代码量不多,写的有点仓促,乱乱的,封装一下函数,变量名改一下比较好看一点。亲测能够成功,有点问题还不知道怎么解决,可以集大家的智慧,提供下思路,给我指点一下也可以,所以不能说百分百成功,总之功能能够实现,很开心哈。
[Asm] 纯文本查看 复制代码
Import "zm.luae"
Dim x,y,rColor,res,mix,mixr,r,g,b,fx1,fx2, mali,h2,h1,moveto,网络时间
Function sumc(x, y)
// 获取指定点颜色
rColor = GetPixelColor(x, y, 0)
//分解成RGB三个值
ColorToRGB rColor, r, g, b
//计算三个值得和,后面获取很多的点的分解成RGB三个值和对比
res= r+g+b
End Function

网络时间=GetNetworkTime()
Traceprint 网络时间

//取最上面的点的RGB三个点的值
sumc (160, 381)
mix = res
For i = 381 To 540
sumc 160, i
// 依次对比,比取第一点还小,就更新一下最小值,遍历完成就找到了最小值。
If mix > res Then
mix = res
// 找打的最小的值对应的i值就是要找的最黑的地方的Y坐标值,也就是要移动的图片最上面的地方
mixr = i
End If
Next

Dim mtop= mixr
TracePrint "要移动的图片的上限Y坐标"&mixr
fx1 = mtop +40
fx2 = mtop+120
sumc (160, fx1)
mix = res
For i = fx1 To fx2
sumc (160, i)
If mix > res Then
mix = res
mixr = i
End If

Next
TracePrint "要移动的图片的下限Y坐标"&mixr
Dim mlow = mixr
mali = Fix((mtop+mlow)/2)
TracePrint "要移动的图片中线坐标Y坐标"&mali

sumc (140, mali)
mix = res
For i = 140 To 170
sumc (i,mali)
If mix > res Then
mix = res
mixr = i
End If
Next
h1=mixr
TracePrint "要移动的图片最左边X坐标"&mixr

sumc (190, mali)
mix = res
For i = 190 To 399
sumc (i,mali)
If mix > res Then
mix = res
mixr = i
End If
Next
h2=mixr
TracePrint "空缺的位置的最左边X坐标"&mixr

moveto = h2-h1
TracePrint "要移动的距离为"&moveto
zm.Swipe (167, 575, 167+moveto, 575,200,3,-100,-1,true)
网络时间=GetNetworkTime()
Traceprint 网络时间

QQ截图20190217135249.png

本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。

最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或联络我们。

对于会员专享、整站源码、程序插件、网站模板、网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。

如果您已经成功付款但是网站没有弹出成功提示,请联系站长提供付款信息为您处理

源码素材属于虚拟商品,具有可复制性,可传播性,一旦授予,不接受任何形式的退款、换货要求。请您在购买获取之前确认好 是您所需要的资源