Android自動(dòng)腳本--實(shí)現(xiàn)自動(dòng)滑塊校驗(yàn)
最近在做某個(gè)應(yīng)用自動(dòng)化操作時(shí)遇到滑塊校驗(yàn),本來(lái)以為獲取到滑動(dòng)坐標(biāo)問(wèn)題就完美解決,沒(méi)想到應(yīng)用有人機(jī)校驗(yàn),看來(lái)還是經(jīng)驗(yàn)不足。

既然有校驗(yàn),那只能寫(xiě)個(gè)算法去模擬人的滑動(dòng),開(kāi)始為了偷懶節(jié)省時(shí)間,只進(jìn)行簡(jiǎn)單的降速、中間隨機(jī)暫停等操作。事實(shí)證明天下沒(méi)有白吃的午餐,時(shí)間沒(méi)節(jié)省,體力到是花費(fèi)了不少。最后只能靜下心來(lái),仔細(xì)研究人工操作時(shí)滑塊的軌跡。在這里記錄下校驗(yàn)繞過(guò)算法,也希望能幫助有同樣問(wèn)題的可以節(jié)省點(diǎn)時(shí)間。
初始值
??初始橫坐標(biāo):x
??初始縱坐標(biāo):y
??slong:滑動(dòng)距離[此處是自左向右]
??最終x坐標(biāo):llx=x+slong
??滑動(dòng)步數(shù):2次
??計(jì)算初次滑動(dòng)距離 : dl
??????if(slong>200)
{
int dl = slong - 70;
if(slong>600) {
???dl = slong - 150;
}
else if(slong>400) {
???dl = slong - 100;
}
}
計(jì)算每步滑動(dòng)的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中每個(gè)steps消耗5ms。
getrandomnmber隨機(jī)產(chǎn)生2參數(shù)之間的隨機(jī)數(shù)
具體偽代碼如下:
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);
???}
