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

    给大家讲一个看广告的脚本写法,对于同类型的app大家都可以去套用。

脚本思路

    平时我们写脚本的思路是这样的~


    第1步操作→等待一段时间→第2步操作→等待一段时间→第3步操作→等待一段时间→第n步操作……


    这种脚本写法可以看作是链条式写法,一环套下一环,它的优缺点很明显:


    【优点】思路清晰简单,编写逻辑完全按照手动操作过程进行。


    【缺点它存在一个弊端,当脚本中间某一步出现问题,链条就会断裂,脚本就会胡乱操作了。比如说突然app来个弹窗,脚本自己就不知道怎么办了。


    当然,如果脚本不出现意外,这种写法其实是很好用的。


本期思路

    这期文章提到的思路,我给它起个名字叫睁开眼运行。那么之前的思路可以叫脚本闭眼运行,就是说无论app画面上是不是我们想要的,脚本都按照预先设定好的代码执行,根本不看画面。


    那么睁开眼运行的思路是什么呢?


    先让脚本判断当前画面是什么内容,判断完以后,根据内容执行对应的操作。


do判断内容是1→执行操作1判断内容是2→执行操作2判断内容是3→执行操作3判断内容是4→执行操作4判断内容是5→执行操作5……loop

    这个有一个要点:必须把所有可能出现的画面全部加上判断,不能遗漏,并且每一个执行的操作都写在判断里面,也就是说所有的操作只有在满足判断条件的情况下才会执行。


实例讲解

    这里我随便找了一个看广告挣钱的APP,讲解一个看视频广告得提现券的例子。


    下面我们逐个页面进行讲解。


    【领券中心】


    判断依据:截图中标记①,可以使用找图或者找色,也可以使用节点工具。


    执行操作:在确认是这个领券中心页面以后,点击后方的领取按钮。

    这里面有个知识点就是相对位置,因为领取按钮有很多个,没办法作为获取坐标的位置的有效标识,那么可以先获取前面文字的位置,偏移固定距离就可以得到领取按钮的位置坐标了。

    代码:这里以节点方式为例,使用jsd插件

If jsdvip.FindNode("By.res(com.game.matrix_crazygame:id/amr).text(领券中心)") Then     TracePrint "领券中心界面"    Dim tab1=jsdvip.FindNodeInfo("By.text($(看视频领提现券(.*)))","rect")    If tab1 Then         TracePrint "点击领取按钮"        tap Tab1[1]+300,Tab1[2]+40    End IfEnd If

注:代码区可以向右滑动查看完整代码。


【广告页面】


    判断依据:倒计时按钮

    执行操作:有按钮等待5秒钟,这里之所以是等待5秒,是因为每个广告时长都不一样,如果写太长可能造成等待时间过长,所以写了5秒,当然写1秒也行。

    代码:

If jsdvip.findnode("By.res(com.game.matrix_crazygame:raw/b)") Then     TracePrint "看广告等待5秒"    Delay 5000End If


    这个代码不能无脑直接用啊,每一个app的节点id都不一样,要根据具体广告页的节点去写,而且同一个app的广告还可能有多种广告形式。


【广告结束页面】


    判断依据:左上角关闭按钮的位置

    

    执行操作:点击关闭


    这一步,由于不同的广告可能会不一样,要格外注意。

    代码:

Dim Tab =  jsdvip.FindNodeInfo("By.clazz(android.widget.ImageView)","rect")//返回数组或nullIf Tab Then    If tab[1] = "30" Then         TracePrint "广告结束了"        Tap Tab[1]+5,Tab[2]+5    End IfEnd If

【领取奖励页】


判断依据:我知道了按钮

执行操作:点击按钮

代码:

If jsdvip.Click("By.res(com.game.matrix_crazygame:id/ai4).text(我知道了)") Then     TracePrint "收提现券,我知道了"End If


    通过循环执行以上几步就可以完成整个脚本了


优缺点

    这种写法的优点是增加了脚本的稳定性,先判断画面再执行操作,每一块代码都是独立存在的,互相基本不关联,可以随时添加新的,最后放在一个大的循环里面。


    同时脚本对于app启动页面也没有要求,因为是先判断页面,所以app是哪个页面,脚本都可以正常运行。


    缺点是增加了脚本的编写难度,比如:通过找图确定了当前是A页面,但是随着脚本的编写,发现在B页面也有这个图,那么脚本就会分不清找图成功是A页面还是B页面,如果是之前的脚本写法就不存在这个问题。


    那么选择识别页面的标识就非常重要了。


    同一个页面可能有多个要操作的按钮,逻辑关系一定要搞清楚,防止混乱。


    还有一个缺点就是每次都要循环运行所有页面的判断,当需要判断页面比较多的时候,判断耗时也会相对比较长。


    总的来说,每一种编程思路都不是绝对完美的,对于我们来说,学习更多的技巧,根据不同情况,使用不同的编程思路。

彩蛋

在公众号后台回复【看广告】两个字,获取本期内容的源码文件。


新建了QQ交流群11群:936858410,感兴趣的话可以加入!


作者:郭立员丨3分钟学堂

隐形字

在这里分享自己的一些经验和想法。

好文和朋友一起看~


    

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注