Android自动脚本--实现自动滑块校验
最近在做某个应用自动化操作时遇到滑块校验,本来以为获取到滑动坐标问题就完美解决,没想到应用有人机校验,看来还是经验不足。
既然有校验,那只能写个算法去模拟人的滑动,开始为了偷懒节省时间,只进行简单的降速、中间随机暂停等操作。事实证明天下没有白吃的午餐,时间没节省,体力到是花费了不少。最后只能静下心来,仔细研究人工操作时滑块的轨迹。在这里记录下校验绕过算法,也希望能帮助有同样问题的可以节省点时间。
初始值
初始横坐标:x
初始纵坐标:y
slong:滑动距离[此处是自左向右]
最终x坐标:llx=x+slong
滑动步数:2次
计算初次滑动距离 : dl
if(slong>200)
{
int dl = slong - 70;
if(slong>600) {
dl = slong - 150;
}
else if(slong>400) {
dl = slong - 100;
}
}
计算每步滑动的steps(Android): stepsm
if(slong<=200)
{
stepsm=getrandomnmber(80,120);
}
else if(slong>200&&slong<400)
{
stepsm=getrandomnmber(120,170);
}
else if(slong>400&&slong<600)
{
stepsm=getrandomnmber(170,200);
}
else
{
stepsm=getrandomnmber(200,250);
}
注:
Android中每个steps消耗5ms。
getrandomnmber随机产生2参数之间的随机数
具体伪代码如下:
if(slong>200)
{
if(slong>200&&slong<400)
{
stepsm=getrandomnmber(120,170);
}
else if(slong>400&&slong<600)
{
stepsm=getrandomnmber(170,200);
}
else
{
stepsm=getrandomnmber(200,250);
}
int dl = slong - 70;
if(slong>600) {
dl = slong - 150;
}
else if(slong>400) {
dl = slong - 100;
}
Point p1 = new Point();
Point p2 = new Point();
Point p3 = new Point();
p1.x = x;
p1.y = y;
p2.x = x + dl;
p2.y = y;
p3.x = llx;
p3.y = y;
tosleep(2000);
Point[] args = {p1, p2, p3};
mDevice.swipe(args, yst);
mDevice.swipe(x, y, llx, y,100);
}
else
{
tosleep(2000);
stepsm=getrandomnmber(80,120);
mDevice.swipe(x, y, llx, y,stepsm);
}