当前位置:   article > 正文

Python控制手机,五排上分_uiautomator dump读取不到文字

uiautomator dump读取不到文字

        当你想抢王者聊天频道的皮肤碎片红包,或者想和小姐姐(小哥哥)开游戏的时候。可以使用python自动化工具,进行自动化加入开黑房间(一般小姐姐开黑会开语音,然后就会有大佬带,然后就容易上分,哈哈哈)。然后可以喝个奶茶,看个电影~一边等待,加入上分的队伍(所需工具下载链接详见文章尾部)

        B站视频传送门:攻城狮晚的个人空间_哔哩哔哩_Bilibili

        如何快速和小姐姐五排开黑~_哔哩哔哩_bilibili

       

目录

1、下载安装ADB工具包和驱动

2、下载安装Andriod SDK

3、UiAutoMatorViewer下载安装

4、测试

5、最终具体Python代码实现

6、参考文献


1、下载安装ADB工具包和驱动

 Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具

下载工具包后,解压到英文路径后,添加系统环境变量

下载驱动之后,点击安装驱动

2、下载安装Andriod SDK

AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载

我是win10系统,所以下载了这个

下载装好之后,会自动运行 SDK Manager。如果没有的话,开始菜单或者安装目录找一下,运行就好。

 

测试了一下安装还挺快的,我安装的是这几个

3、UiAutoMatorViewer下载安装

1、下载jdk1.8安装(据说其他版本使用UiAutoMatorViewer有问题):

可以先查看jdk(Java Development Kit——Java开发工具包)版本。开始菜单输入cmd,打开命令行窗口,输入java -version查看:

如果没有jdk的话,可以从如下网址下载安装

https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html

2、下载UiAutoMatorViewer

https://dfenghuoyunji.jb51.net/201904/tools/uiautomatorviewer.rar

下载后,将里面的uiautomatorviewer.jar文件复制到之前安装的sdk的 tools/lib目录下

如果不放心的话,可以将之前的uiautomatorviewer.jar 备份一下

Sdk目录下的tools目录中,uiautomatorviewer.bat可以备份下,然后最后一行Dcom.android.uiautomator.bindir=后接adb实际存放路径。

我放在了D:\program files\Android\abd下

此时即可双击运行uiautomatorviewer.bat,打开uiautomatorviewer

 

4、测试

1、使用获取截图png和uix文件,保存到当前文件夹:

adb shell screencap -p /sdcard/sc.png

adb pull /sdcard/sc.png

adb shell uiautomator dump /sdcard/sc.uix

adb pull /sdcard/sc.uix

2、使用uiautomatorviewer工具查看能否解析成功

经过测试,手机桌面是可以解析的

但是王者游戏界面无法解析

所以准备使用百度文字识别api,进行操作,大致思路如下:

可以免费领取百度文字识别api的额度,如下网址:

https://cloud.baidu.com/doc/OCR/s/9k3h7xuv6#通用文字识别(高精度含位置版)

如果没有申请的话,默认是收费的,含位置信息的,最便宜的大概0.01元/次调用

里面有相应的调用方式参考代码示例

         

Token的话,可以参考这个文档,需要先创建应用

https://ai.baidu.com/ai-doc/REFERENCE/Bkru0l60m

        作者还试用了iOCR通用版,就是你可以选择需要识别的位置,指定参考点。但是经过测试,无法满足需求。

Adb调试,使用的是华为的鸿蒙手机(百度了一下,鸿蒙系统居然不是安卓了,不过应该是为了通用,adb工具还是可以进行调试的)。

连接手机后,电脑端会跳出华为手机助手,验证过后。Cmd中使用adb截图。如果截图不了的话,华为手机助手会提示再次验证。验证通过后,即可使用adb命令

Cmd中截图,查看没问题后,使用python脚本进行测试。其中点击屏幕命令如下:

adb shell input tap 522 1120(x y)


5、最终具体Python代码实现

  1. import os
  2. import time
  3. import base64
  4. import shutil
  5. import requests
  6. from PIL import Image
  7. def Myexec(Tstr):
  8. # 自定义执行命令函数,方便调试
  9. os.system(Tstr)
  10. # client_id 为官网获取的AppKey, client_secret 为官网获取的SecretKey
  11. host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【你的AppKey】&client_secret=【你的SecretKey】'
  12. response = requests.get(host)
  13. if response:
  14. response = response.json()
  15. token = response["access_token"]
  16. print(response)
  17. print(token)
  18. # 可以将token保存为文件,需要的时候再取出来,这里不保存也能用,所以先不保存。
  19. # 默认过期时间30天["expires_in"]
  20. # 网络图片文字识别(含位置版)0.03一次,无折扣。能否检测,暂未尝试
  21. # 通用文字识别(高精度版)0.03一次,多了有折扣
  22. # request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic" # 可以检测出♀
  23. # 通用文字识别(高精度含位置版)0.04一次,多了有折扣
  24. # request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate" # 可以检测出♀
  25. # 通用文字识别(标准版含位置)0.01一次,多了有折扣
  26. request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general" # 可以检测出♀
  27. # 通用文字识别,不含位置的0.005一次,多了有折扣。总结了一下,还是需要位置比较好,不包含位置的,不方便点击。
  28. spic = 'sc.png'
  29. dpic = "tmp.png"
  30. abd1 = 'adb shell screencap -p /sdcard/'+spic
  31. abd2 = 'adb pull /sdcard/'+spic
  32. # adb shell screencap -p /sdcard/sc.png
  33. # adb pull /sdcard/sc.png
  34. testCount = 100 # 多少次循环没有找到合适的队伍及停止
  35. testN = 0 # 当前截屏识别次数
  36. clickOk = 0 # 进入队伍的标志
  37. while testN<testCount:
  38. testN+=1
  39. time.sleep(2) # 经过2秒获取一次截屏(5秒以内都行)。因为王者聊天频道刷新时间大概是5秒
  40. Myexec(abd1) # 获取截屏
  41. Myexec(abd2) # 从手机拉(复制)到本地
  42. im = Image.open(spic)#返回一个Image对象:[宽,高]
  43. spicW = im.size[0]
  44. spicH = im.size[1]
  45. DpicW = spicW/2
  46. print('第%d次尝试,截屏的宽:%d,高:%d'%(testN,spicW,spicH))
  47. # 裁剪一半、保存。增加响应速度。对于王者进入队伍的需求来说,只需要左半部分进行图片识别即可
  48. cropped = im.crop((0, 0, DpicW, spicH)) # (left, upper, right, lower)
  49. cropped.save(dpic)
  50. t = time.time()
  51. tmpName = "sc"+str(t)+".png"
  52. shutil.copy(dpic,"tmp/"+tmpName) # 保存到临时文件夹
  53. # 二进制方式打开图片文件,base64编码后,发送给百度api
  54. f = open(dpic, 'rb')
  55. img = base64.b64encode(f.read())
  56. params = {"image":img}
  57. access_token = token
  58. request_url = request_url + "?access_token=" + access_token
  59. headers = {'content-type': 'application/x-www-form-urlencoded'}
  60. response = requests.post(request_url, data=params, headers=headers) # 获取百度翻译api的返回值
  61. if response:
  62. response = response.json() # 解析返回值为json格式
  63. wres = response["words_result"]
  64. thisGhw = 0
  65. print (wres)
  66. for w in wres:
  67. # if "皮肤碎片红包" in w["words"]: # 也可以判断是否有红包,然后点击。哈哈哈,这个就留给大家自己去尝试了
  68. tWords = w["words"]
  69. if "♀" in tWords: # 男生的这个符号♂,经过测试,百度api识别不出来
  70. thisGhw = w["location"]["top"] # 文字距离屏幕截图顶部的距离 70-80,78
  71. thisGww = w["location"]["left"] # 文字距离屏幕截图左边的距离 110-120,116
  72. print("girl",thisGhw,thisGww)
  73. # if ("五人排位" in tWords or "无限乱斗" in tWords) and ("3/5" in tWords or "4/5" in tWords or "35)" in tWords or "45)" in tWords):
  74. if "排位" in tWords or "无限乱斗" in tWords: # 测试条件
  75. thisPhw = w["location"]["top"] # 70-80,78
  76. thisPww = w["location"]["left"] # 110-120,116
  77. print("五排或乱斗",thisPhw,thisPww)
  78. if thisGhw != 0:
  79. exY = int(thisPhw)-int(thisGhw)
  80. exX = int(thisPww)-int(thisGww)
  81. if exY>70 and exY<90 and exX>110 and exX<128: # 如果满足条件,则点击,进入房间。
  82. # 不同手机分辨率下,有可能不一样。这个需要具体测试 (我的是2340*1080px)
  83. print("点击位置,x:%s,y:%s"%(thisPww,thisPhw))
  84. # adb shell input tap 540 1104
  85. Myexec("adb shell input tap "+str(thisPww)+" "+str(thisPhw))
  86. break
  87. if "全队" in tWords or "召集" in tWords: # 判断是否已经进入房间
  88. clickOk = 1
  89. print("进入房间成功")
  90. if clickOk == 1:
  91. # 如果已经进入房间,退出循环
  92. break

经过测试,一般等待几分钟,就会进入想要的房间啦~再也不用一直盯着屏幕啦~其实还有很多功能,比如自动抢皮肤碎片啦、做任务啦,这些就需要大家自己去实现啦~

所用工具下载地址:链接:https://pan.baidu.com/s/1ckE8mj_eWhVatAFoV8E3Mg 
提取码:lkkz


6、参考文献

  1. 《ADB 操作命令详解及用法大全》ADB 操作命令详解及用法大全 - 掘金
  2. 《Android自动化测试应用<一>《uiautomatorviewer工具的安装与使用》》https://www.cnblogs.com/corsacsherry/p/10609339.html
  3. 《Android SDK的下载与安装》https://www.cnblogs.com/nebie/p/9145627.html
  4. 《OSError: cannot write mode RGBA as JPEG》https://blog.csdn.net/weixin_39777626/article/details/82774270
  5. 《Python读取图片尺寸、图片格式》https://www.cnblogs.com/d0main/p/7613296.html
  6. 《Python实现图片裁剪的两种方式(Pillow和OpenCV)》https://www.jb51.net/article/173183.htm
  7. 《Uiautomatorviewer报错Unexpected error while obtaining UI hierarchy java.lang.reflect.InvocationTargetE》https://blog.csdn.net/qq_41714308/article/details/113886433
  8. 《UI Automator Viewer工具的使用》https://www.cnblogs.com/lhx0827/p/9577575.html
  9. 《用Python实现自动化操作Android手机》https://www.cnblogs.com/xakzp/articles/9662770.html
  10. 《python 控制手机滑屏_如何使用python控制手机(以微信游戏跳一跳为例)》https://blog.csdn.net/weixin_26757939/article/details/113642335
  11. 《android adb 模拟点击、滑动、输入、按键》https://blog.csdn.net/liukang325/article/details/79268173

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/316469
推荐阅读
相关标签
  

闽ICP备14008679号