• 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~

  • 相关阅读:
    JVM总结-java基本类型
    JVM总结-虚拟机怎么执行字节码
    spring-BeanDefinition流程源码分析
    spring-BeanFactory源码解析
    linux文件基本权限-基本权限的修改
    Spring-IoC容器初始化流程源码分析
    spring-AOP
    JavaScript笔记 第十六章 匿名函数和闭包
    C# 指针(unsafe与fixed的使用)
    devenv.exe
  • 原文地址:https://www.cnblogs.com/luoman/p/12547951.html
Copyright © 2020-2023  润新知