使用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可以编程实现自动化玩手游

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容