安卓游戏自动化控制实验!超详细!小白也能一学就会!(Python + uiautomator2 + Open CV)

Posted 紫夜君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓游戏自动化控制实验!超详细!小白也能一学就会!(Python + uiautomator2 + Open CV)相关的知识,希望对你有一定的参考价值。

目录

一、所需环境搭建

二、自动控制的初步实现

2.1 脚本代码逻辑的简单介绍

2.2 点击事件的编写

2.3 小结

三、安卓自动化之精确控制的实现


一、所需环境搭建

        上一篇已经详细介绍了如何搭建所需环境:所需环境搭建的详细操作

二、自动控制的初步实现

2.1 脚本代码逻辑的简单介绍

        编写代码之前,搞清楚逻辑很重要,你得知道你需要做什么事,也就是实现什么功能。然后才是如何实现这个功能。那么,我们需要实现什么功能呢。首先思考一个问题,在你使用手机时,最核心的操作是什么?

       是点击。

        仔细想想看,你使用手机时,在不同的界面点击不同的位置,通过不断的点击完成各种操作。但是,光点击显然是不够的,因为你得明白在什么时候,点击什么位置,而不是无脑全屏乱点。所以,要想更好的实现点击事件,我们就得让电脑知道,什么时候点击什么位置。即精确的点击。

        所以该脚本的代码,都是为了如何实现精确的点击服务的。

2.2 点击事件的编写

        首先,我们假设需要查看TapTap排行榜上第一个应用的信息。那么通过脚本需要怎么去实现呢?

        第一步自然是开启模拟器了(将模拟器开启到任意界面)

                

        在上一章中提到的WEditor工具,这是一个非常好用的工具。使用CMD命令行开启WEditor工具。

        1.在命令行输入  python -m weditor 将会在浏览器中启动工具。

                            

         2.在输入设备ID 后(各设备的ID参考上一章内容),点击Connect,之后将画面切换到实时。

出现这个绿色的标志表示连接成功。

         3.点击排行榜,在右侧的Selected Element栏中会出现该点的一些相关信息,之后我们点击坐标栏的点击,在最右侧会出现该点击操作的代码。

         模拟器和WEditor的内容都会进入到排行榜页面,因为WEditor是实时同步模拟器里的画面的。

                            

注:

1)代码中 d.click(309, 167)   的函数原型是     uiautomator2.connect().click(int X, int Y)

X 表示点击位置的横坐标,Y 表示点击位置的纵坐标。通过坐标轴的确定就能实现点击各种位置,该坐标系以左上角的点为坐标原点(0,0)

2)如果坐标栏中的坐标轴为小数,可以点击坐标旁边的 % 和 px 按键进行切换(一定要切换到整数,因为之前使用小数遇到过竖屏游戏点击位置异常的问题。)

3)其实使用 XPathLite 中的内容也可以用于确定点击位置,而且在存在页面切换时使用XPathLite进行点击控制比使用坐标点进行控制要稳定许多。(我们不使用 XPathLite 确定点击位置的原因是在游戏中是无法使用 XPathLite 的,XPathLite的使用存在局限性)

        4.点击排行榜第一的游戏,类似于第三步中的操作,即可进入该游戏的信息中。

WEditor:                                                                        模拟器:      

                                      

        可见,依次点击(309,167)  和 (321,349)两点,就可以从TapTap首页进入排行榜第一的游戏了。

        接下来,我们需要将这些操作进行代码化处理。在 WEditor 的 Coding 栏中,记录了我们执行这些操作的代码,我们只需要将这些代码拷贝到PyCharm中。

                                        ​​  ​​​

        将上述代码CV到PyCharm后进行一些简单的修改。

                

         在每次点击操作后都加入一个延时,主要是为了方式点击后模拟器没有及时响应,导致下一次点击出现误操作。

        看一看运行效果:

 

注:如果运行时出现警告:

        RuntimeWarning: uiautomator2 is not reponding, restart uiautomator2 automatically stacklevel=1)

        不用担心,这表示你的uiautomator2没有启动,系统会自动帮你启动,前提是你的模拟器(手机)装了ATX 这个APP

2.3 小结

        理论上,通过多个点击事件的顺序点击,你就能操作任何的安卓手机应用。但是,实际操作中会发现,只是通过单一的点击远远不能够满足控制需求。当一个事件的处理逻辑稍微复杂些,或者需要的点击次数比较多的时候,这个点击操作往往会因为网络延迟,手机卡顿,打开软件太慢等原因,导致点击错误。(因为你的电脑不知道你现在处于什么界面,他只知道点击某一个坐标点,光靠延迟是很实现精确操作的)。一次的卡顿,就可能导致整个点击顺序的逻辑出现混乱,因此,让电脑知道什么地方能点,尤为重要。

        在下一章,我们将解决这些问题,实现精确控制。

三、安卓自动化之精确控制的实现

        (待更新)

写在最后:

        其实早在去年四月份,这篇文章已经完成了一大半,不知不觉已经在草稿箱躺了将近一年半,由于各种原因一直没有想着要去更新发布它(PS:其实主要是拖延症,以及懒)。但是最后,我还是打算继续把安卓游戏自动化这个专题一点点完善下去。

以上是关于安卓游戏自动化控制实验!超详细!小白也能一学就会!(Python + uiautomator2 + Open CV)的主要内容,如果未能解决你的问题,请参考以下文章

安卓游戏自动化控制实验!超详细!小白也能一学就会!(Python + uiautomator2 + Open CV)

安卓游戏自动化控制实验!超详细!小白也能一学就会!(Python + uiautomator2 + Open CV)

安卓游戏自动化控制实验!超详细!小白也能一学就会!(Python + uiautomator2 + Open CV)

满天星空小游戏—小白一学就会的python游戏开发实战源码+教程

小白一学就会(条件结构)

小白一学就会(条件结构)