使用python编程自动玩手游
我们在玩手游的时候,会发现手游中有些步骤总是需要重复玩,每天都要重复,比如重复做日常任务啥的,一直肝个不停,但是其实很多东西都是固定玩法了,但是就是需要你机械的重复,我就没见过什么手游是不肝的,就算自诩全流程自动化的手游,总还是有些东西需要重复做的。
那么怎么让程序帮我们自动玩手游呢?接下来介绍怎么做
想想我们是怎么玩手游的,我们玩手游,是眼睛识别手游画面,然后大脑根据游戏画面指挥手指做出相应触摸,触控操作。
因此自动化玩手游的技术要点在于如下两点:
- 可以向手机发送触摸,点击等事件
- 能够识别手游的具体物体对象
其中第一点可以向手机发送触摸,点击事件,保证了让程序可以代替人类手指操作手游画面,第二点则是类似人类眼睛识别游戏画面了。
首先解决第一个技术要点,编程向手机发送触摸,点击等事件。
打开github项目 https:// github.com/openatx/uiau tomator2
uiautomator2 这个项目可以使用python在电脑端控制连接到电脑的手机
安装uiautomator2
pip install --upgrade --pre uiautomator2
如果下载很慢,请使用国内的pip镜像站,这是由于大家都知道的原因。。。
pip install --upgrade --pre uiautomator2 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成之后,连接手机或者打开电脑端的模拟器试试这个库怎么用的。
这里我用网易MuMu模拟器做测试,如果使用真机测试的话,请打开真机的usb调试模式
使用adb devices命令查看电脑连接的设备,执行命令后,显示已经有一个设备
adb devices
List of devices attached emulator-5554 device
接下来打开python终端
>>> import uiautomator2 as u2
>>> u2.connect("emulator-5554")
[W 210131 22:27:11 __init__:203] atx-agent has something wrong, auto recovering
[D 210131 22:27:11 __init__:287] device emulator-5554 is online
[I 210131 22:27:11 init:155] uiautomator2 version: 2.12.2
<uiautomator2.Device object at 0x7fba2815ac10>
>>> d = u2.connect("emulator-5554")
>>> print(d.info)
[D 210131 22:27:52 __init__:600] kill process(ps): uiautomator
[D 210131 22:27:53 __init__:619] uiautomator-v2 is starting ... left: 40.0s
[D 210131 22:27:54 __init__:619] uiautomator-v2 is starting ... left: 39.0s
[I 210131 22:27:54 __init__:583] uiautomator back to normal
{'currentPackageName': 'com.mumu.launcher', 'displayHeight': 936, 'displayRotation': 0, 'displaySizeDpX': 853, 'displaySizeDpY': 480, 'displayWidth': 1664, 'productName': 'cancro', 'screenOn': True, 'sdkInt': 23, 'naturalOrientation': True}
可以看到已经正常通过代码连接到设备了
执行一下点击事件,这里的click方法的参数是点的坐标,x和y
>>> d.click(0, 0)
这样子,我们有了可以往设备发送点击事件的能力了,触摸和双击,滑动这些都是可以支持的,具体可以看uiautomator2 项目的主页
接下来是解决如何识别手游物体的功能和技术要点,这一点uiautomator2也帮我们实现了。
也就是图像匹配,在使用这个功能之前需要先把依赖安装上
pip install -U "uiautomator2[image]" -i https://pypi.doubanio.com/simple
目前开放两个接口
imdata = "target.png" # 也可以是URL, PIL.Image或OpenCV打开的图像