大家好, 我是公众号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 If
End If
注:代码区可以向右滑动查看完整代码。
【广告页面】
判断依据:倒计时按钮
执行操作:有按钮等待5秒钟,这里之所以是等待5秒,是因为每个广告时长都不一样,如果写太长可能造成等待时间过长,所以写了5秒,当然写1秒也行。
代码:
If jsdvip.findnode("By.res(com.game.matrix_crazygame:raw/b)") Then
TracePrint "看广告等待5秒"
Delay 5000
End If
这个代码不能无脑直接用啊,每一个app的节点id都不一样,要根据具体广告页的节点去写,而且同一个app的广告还可能有多种广告形式。
【广告结束页面】
判断依据:左上角关闭按钮的位置
执行操作:点击关闭
这一步,由于不同的广告可能会不一样,要格外注意。
代码:
Dim Tab = jsdvip.FindNodeInfo("By.clazz(android.widget.ImageView)","rect")//返回数组或null
If Tab Then
If tab[1] = "30" Then
TracePrint "广告结束了"
Tap Tab[1]+5,Tab[2]+5
End If
End 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分钟学堂
隐形字
在这里分享自己的一些经验和想法。