大家好,我是公众号3分钟学堂的郭立员~

这是一篇分析类型的文章,主要讲关于滑块滑动的问题,大家应该遇到过这么一种情况,用脚本操作滑块,明明已经滑到位了,就是验证不通过。

按键精灵怎么滑动到固定坐标(为啥手动滑动能过验证)(1)

当我们手动滑动的时候,即使是滑动稍微差一点,也可以验证通过,这就很神奇啊。

那么手动滑动和脚本滑动到底有什么区别呢?

【1】先来看看两种方式的滑动轨迹

打开指针位置,方便查看。

①手动滑动

按键精灵怎么滑动到固定坐标(为啥手动滑动能过验证)(2)

②脚本滑动

按键精灵怎么滑动到固定坐标(为啥手动滑动能过验证)(3)

【2】根据上面两个图,分析两种方式的区别

①划线的笔直程度,手动我已经尽量笔直了,但是尾部还是有一点点弯曲。

②手动滑动的“触点”要远多于脚本滑动的,触点指的是上图中的小红点。

③脚本滑动的“触点”是平均分布的,而手动的不是。那它有啥特点呢?触点间的间隔是非平均的,速度越快、间隔越大,收尾处要比前面密集。

分析了两者的区别,我感觉“触点”的产生可能是因为手对屏幕的按压力度不同,滑动时的短暂停顿等原因。

脚本模拟手动滑动

(1)不使用swipe命令,使用touchdown、touchmove、touchup这一组命令,这组命令可以通过touchmove的数量和它的参数控制“触点”数。

(2)引入两个随机数,一个是触点间隔的随机,一个是避免直线而做的滑动上下波动的随机。

(3)触点间隔前半部分比较大,结尾部分间隔比较小,采用分段滑动策略。

脚本源代码

/* @测试设备:雷电模拟器 @分辨率:540*960 dpi 240 @作者:郭立员 @公众号:3分钟学堂 @声明:仅供学习使用 */ /* 参数说明: 参数1:按钮横坐标 参数2:按钮纵坐标 参数3:要滑动距离 */ 滑动(56,487,370) Function 滑动(x,y,distance) Dim rnd1,rnd2,d,h Dim speed=10 TouchDown x,y,1 Do rnd1 = Int(speed * Rnd() 1) rnd2 = Int(3 * Rnd() - 1) d = d rnd1 h = h rnd2 If d > distance Then TouchMove x distance, y h, 1 Exit do else TouchMove x d, y h, 1 End If If d > distance*0.7 Then speed=3 End If Loop TouchUp 1 End Function

测试结果截图:

按键精灵怎么滑动到固定坐标(为啥手动滑动能过验证)(4)

猜想,未必是对的

平台是怎么知道滑动时用脚本的呢,我猜测是判断触点数量,触点是否是一条直线,触点间隔是否平均,结尾处触点是否密集。

=正文完=

,