tesseract+uiautomator2+夜神模拟器 悠长假期手游集市识别验证码自动购买
开宗明义:这篇文章实际上就是把我的操作记录一遍,以防以后忘记了,又要到处去搜罗。由于我是个python小白,所以这些操作都是各处学来拼到一起的,也因此我确信如果不赶紧记下来,很快就会忘掉。于是就趁热写了这随笔。
1 引言
1.1 背景
最近两个月一直在肝悠长假期这款海盗经营类的养老休(重)闲(肝)手游,说来伤心,真的我最初是冲着养老这俩字玩的,没想到啊没想到,现在竟然被动养成了生物钟,每天早上六点一醒,赶紧去收我的作物,然后就是一个小时的各种任务、配送和农活。回想以前七八点几个闹钟都喊不醒的我,现在意识到果然当一个“云农民”也不容易。
啊哈,闲话休提,今天我们要干什么呢?这就要说到这个游戏里的交易系统——集市。集市这个交易系统可谓是吐槽满满,此处不表,主要讲一下它是怎么运作的:在集市中,每个玩家可以上架各种多余的产品,也可以从架上购买其他玩家上架的自己需用的产品,就这样形成了供求。然而可想而知,不论在游戏还是在现实市场中,都会有稀缺的商品,而这种商品往往供不应求,这点在游戏中的市场尤其明显。在现实生活中,对此的解决办法是市场自动调节价格,直至稀缺的商品价格达到很高,便能自动实现供求平衡;但在这款游戏里,并不是如此,而是系统给每种产品都定好了价格,只能按照固定的价格交易,这样的话,由于基本上每个人都有购买的能力,而产品远远达不到每个人的需求,便产生了严重的供不应求。于是许多玩家专门“蹲”集市,每隔一定时间就刷新一下该产品的货架,一旦发现有上架立即抢之。然而想抢到货物总是要花费许多的时间和精力去等待,这对于我来说是严重不能忍受的(其实我还是忍受了很久,并且显然今后还要忍受)。
好吧,好多废话,其实引言可以略过不看的。这回真的回归正题,在这个集市中,我要做的事情是这样的:每隔一定时间刷新货架(因为系统有刷新冷却cd),并购买货物(注意也有购买间隔cd);当出现验证码时,自动填写验证码。
可以看见,其实前一个要求容易得很,随便一个自动点击器就可以轻松搞定;但是由于系统会定时对玩家要求填写一个简单的数字加法的验证码(这是游戏为了尝试应对集市中连点器泛滥的情况,但似乎并没有什么作用,反而让普通玩家更加艰难了),这对于一个普通的手机连点器似乎要求过高。我之前用的是auto.js,翻遍全网也没有找到相关的图片识别教程,似乎是不行的,如果有朋友能告诉我有关auto.js如何识别图片验证码的知识,实在感激不尽。于是我几经辗转用自学了不久的python希望实现这件事,但是我自己觉得自己的代码似乎颇为繁琐,尤其是识别效率堪忧,还请大家不吝赐教,帮助我提高一下自己的代码水平。
1.2 主要工具
用到了夜神模拟器;uiautomator2进行集市上的操作;tesseract进行文字识别;jupyter notebook, python 3.7.1
2 具体步骤
2.1 adb连接
在anaconda prompt中进入夜神模拟器bin目录,并输入
adb.exe devices