添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
绅士的茴香  ·  安装cplex到python_mob64ca ...·  2 周前    · 
个性的饼干  ·  实用的 Python 之 ...·  1 周前    · 
紧张的烤面包  ·  编译器错误 C3861 | ...·  4 月前    · 
傲视众生的凉面  ·  log4net ...·  1 年前    · 
精彩文章免费看

使用python编程自动玩手游

我们在玩手游的时候,会发现手游中有些步骤总是需要重复玩,每天都要重复,比如重复做日常任务啥的,一直肝个不停,但是其实很多东西都是固定玩法了,但是就是需要你机械的重复,我就没见过什么手游是不肝的,就算自诩全流程自动化的手游,总还是有些东西需要重复做的。

那么怎么让程序帮我们自动玩手游呢?接下来介绍怎么做

想想我们是怎么玩手游的,我们玩手游,是眼睛识别手游画面,然后大脑根据游戏画面指挥手指做出相应触摸,触控操作。

因此自动化玩手游的技术要点在于如下两点:

  • 可以向手机发送触摸,点击等事件
  • 能够识别手游的具体物体对象
  • 其中第一点可以向手机发送触摸,点击事件,保证了让程序可以代替人类手指操作手游画面,第二点则是类似人类眼睛识别游戏画面了。

    首先解决第一个技术要点,编程向手机发送触摸,点击等事件。

    打开github项目 https://github.com/openatx/uiautomator2

    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打开的图像
    d.image.match(imdata) 
    # 匹配待查找的图片,立刻返回一个结果
    # 返回一个dict, eg: {"similarity": 0.9, "point": [200, 300]}
    d.image.click(imdata, timeout=20.0)
    # 在20s的时间内调用match轮询查找图片,当similarity>0.9时,执行点击操作
    

    注意相关的图片需要手机的原图裁剪后的图才可以,也就是使用里面的screenshot功能截图裁剪出来的相关图片才可以。

    所以我们借助uiautomator2可以编程实现自动化玩手游