uiautomator2 简单使用:一分钟实现辅助外挂

上文讲了 uiautomator2 环境搭建,介绍中也讲了,uiautomator2比较大的优点是可以通过电脑直接运行命令,让手机执行动作,本身是基于python实现的,我们就可以借用python平台上强大的扩展库,实现各种自动化测试功能,甚至借用AI实现智能化测试等等。
当然,除了自动化测试我们还可以“学以致用”搞点别的,比如写个游戏辅助脚本外挂,这几年要说最火的页游改手游最成功点案例非 “贪玩传奇” 莫属,跑到哪里都能看到 古天乐、郭富城、谢霆锋等各路男神邀请你玩“真传奇”,跑出个达叔非要找你回收元宝,广告洗脑效果比当年脑白金有过之无不及。
我就被好奇心勾住了,下载了一个传奇来体验体验,玩了几天,发现做任务真累。怎么办呢,时间不够,技术来凑。。废话不多说,开发走起。

首先当然是启动weditor, adb wifi通过连接手机

python -m weditor
adb connect 192.168.1.101

连接之后,我们dump 一下UI布局
在这里插入图片描述
可以看出,基本上我们是无法通过id等查找到控件内容的,那么我就只能用最原始的方式了,通过查找坐标点,模拟按键效果,达到辅助我们做任务目的,索性通过wedtior 我们动态取点那是相当方便啊。。鼠标放图标上,点下就点就出来了,首先我们就来模拟下竞技任务
通过取点,测试代码如下

#执行竞技任务
#点击竞技图标
d.click(0.93, 0.556)
time.sleep(3)
#开始竞技
d.click(0.83, 0.384)
time.sleep(30)
d.click(0.921, 0.962)

在这里插入图片描述
丢到weditor运行一下,立马就看下效果了。。一次简单的任务就完成了
当然,既然是辅助脚本,那么肯定设计到轮训、定时执行任务链,那么在python中如何实现一个简单的任务链呢。
答案是通过 functools 来实现
比如,我们可以建立一个 LegendJobMangage.py 文件来专门构建我们任务链

import datetime
import functools
import schedule
jobList = []
# 竞技
def jinji():
    '''
    实现竞技功能
    :return:
    '''
    print((datetime.datetime.now() + datetime.timedelta(seconds=2)).strftime("%H:%M:%S") + " 竞技")

def yewaiBoss():
    '''
    :return:
    '''
    print((datetime.datetime.now() + datetime.timedelta(seconds=2)).strftime("%H:%M:%S") + " 刷野外boss")

def shenyuBoss():
    '''
    :return:
    '''
    print((datetime.datetime.now() + datetime.timedelta(seconds=2)).strftime("%H:%M:%S") + " 刷神域boss")

#顺序执行任务链中任务
def excuteJobList():
    for i in range(len(jobList)):
        jobFun = functools.partial(jobList[i])
        fun = functools.update_wrapper(jobFun, jobList[1])
        fun()

if __name__ == "__main__":
    #定时任务链接
    jobList.append(jinji)
    jobList.append(yewaiBoss)
    jobList.append(shenyuBoss)
    #指定某个时间执行任务链
    schedule.every().day.at('08:00').do(excuteJobList)
    schedule.every().day.at('13:00').do(excuteJobList)
    schedule.every().day.at('17:00').do(excuteJobList)
    #x秒执行一次
    schedule.every(5).seconds.do(excuteJobList)
    #excuteJobList()
    while True:
        schedule.run_pending()

通过functools 顺序执行的list中任务项,达到任务链的目的
核心代码如下

 jobFun = functools.partial(jobList[i])
 fun = functools.update_wrapper(jobFun, jobList[1])
 fun()

执行效果如下

23:01:04 竞技
23:01:04 刷野外boss
23:01:04 刷神域boss
23:01:09 竞技
23:01:09 刷野外boss
23:01:09 刷神域boss


2020年 第二期《python全栈测试开发》网络课程于3月29日开班

一个简单的辅助脚本就这样完成了,为了防止麻烦,案例中只是提供思路和伪代码,如需详细代码,欢迎加QQ群:1085210541,本次分享就暂时到这里了。

下次分享预告

这里我们只用到了定时轮训,玩过游戏的都知道,很多情况下我们都是要去等boss刷新,拼手速刷boss,刷副本,那么我们如何实现智能化,刷怪和boss呢,请关注下次分享
《uiautomator2 + AI 智能图片识别实现抢刷怪,升级打装备快人一步》

欢迎大家点赞、留言、转发来一波,老铁666~
欢迎大家点赞、留言、转发来一波,老铁666~
欢迎大家点赞、留言、转发来一波,老铁666~

原文地址:https://www.cnblogs.com/luoman/p/12547951.html