折腾:
【未解决】用uiautomator2实现安卓手机打开支付宝自动收集蚂蚁森林能量
期间,先去mac中搭建此处用于后续通过uiautomator2去自动操作实现蚂蚁森林的能量的开发环境
想了想还是新建虚拟环境吧:
1 2 3 4 5 6 | virtualenv venv Using base prefix '/Users/xxx/.pyenv/versions/3.8.0/Python.framework/Versions/3.8' New python executable in /Users/xxx/dev/crifan/python/AutoCollectAliPayAntForestEnery/venv/bin/python3 .8 Also creating executable in /Users/xxx/dev/crifan/python/AutoCollectAliPayAntForestEnery/venv/bin/python Installing setuptools, pip, wheel... done . |
继续:
安装uiautomator2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | (venv) xxx@xxx ~ / dev / crifan / python / AutoCollectAliPayAntForestEnery pip install uiautomator2 Collecting uiautomator2 Downloading uiautomator2 - 2.11 . 2.tar .gz ( 674 kB) |████████████████████████████████| 674 kB 465 kB / s Collecting six Using cached six - 1.15 . 0 - py2.py3 - none - any .whl ( 10 kB) Collecting requests Using cached requests - 2.24 . 0 - py2.py3 - none - any .whl ( 61 kB) Collecting whichcraft Using cached whichcraft - 0.6 . 1 - py2.py3 - none - any .whl ( 5.2 kB) Collecting logzero~ = 1.5 Using cached logzero - 1.5 . 0 - py2.py3 - none - any .whl ( 14 kB) Processing / Users / xxx / Library / Caches / pip / wheels / f1 / 5b / 38 / 115b213dfbf5562108ea22df17c063f6378350205a819795aa / progress - 1.5 - py3 - none - any .whl Collecting retry~ = 0.9 Using cached retry - 0.9 . 2 - py2.py3 - none - any .whl ( 8.0 kB) Collecting adbutils< 1.0 ,> = 0.8 . 2 Downloading adbutils - 0.8 . 2.tar .gz ( 156 kB) |████████████████████████████████| 156 kB 16.1 MB / s Collecting Deprecated~ = 1.2 . 6 Downloading Deprecated - 1.2 . 10 - py2.py3 - none - any .whl ( 8.7 kB) Collecting Pillow Downloading Pillow - 7.2 . 0 - cp38 - cp38 - macosx_10_10_x86_64.whl ( 2.2 MB) |████████████████████████████████| 2.2 MB 10.2 MB / s Collecting lxml> = 4.3 Downloading lxml - 4.5 . 2 - cp38 - cp38 - macosx_10_9_x86_64.whl ( 4.5 MB) |████████████████████████████████| 4.5 MB 27.7 MB / s Collecting cached - property < 2.0 ,> = 1.5 . 1 Using cached cached_property - 1.5 . 1 - py2.py3 - none - any .whl ( 6.0 kB) Collecting packaging~ = 20.3 Downloading packaging - 20.4 - py2.py3 - none - any .whl ( 37 kB) Collecting certifi> = 2017.4 . 17 Using cached certifi - 2020.6 . 20 - py2.py3 - none - any .whl ( 156 kB) Collecting chardet< 4 ,> = 3.0 . 2 Using cached chardet - 3.0 . 4 - py2.py3 - none - any .whl ( 133 kB) Collecting idna< 3 ,> = 2.5 Using cached idna - 2.10 - py2.py3 - none - any .whl ( 58 kB) Collecting urllib3! = 1.25 . 0 ,! = 1.25 . 1 ,< 1.26 ,> = 1.21 . 1 Using cached urllib3 - 1.25 . 10 - py2.py3 - none - any .whl ( 127 kB) Collecting decorator> = 3.4 . 2 Downloading decorator - 4.4 . 2 - py2.py3 - none - any .whl ( 9.2 kB) Collecting py< 2.0 . 0 ,> = 1.4 . 26 Downloading py - 1.9 . 0 - py2.py3 - none - any .whl ( 99 kB) |████████████████████████████████| 99 kB 15.0 MB / s Collecting deprecation< 3.0 ,> = 2.0 . 6 Downloading deprecation - 2.1 . 0 - py2.py3 - none - any .whl ( 11 kB) Processing / Users / xxx / Library / Caches / pip / wheels / 78 / 03 / b3 / b323c1b0b5e6c10149d645e2ec8db14fd834a6e2c0f275bd45 / apkutils2 - 1.0 . 0 - py3 - none - any .whl Collecting wrapt< 2 ,> = 1.10 Downloading wrapt - 1.12 . 1.tar .gz ( 27 kB) Collecting pyparsing> = 2.0 . 2 Downloading pyparsing - 2.4 . 7 - py2.py3 - none - any .whl ( 67 kB) |████████████████████████████████| 67 kB 12.0 MB / s Collecting xmltodict Using cached xmltodict - 0.12 . 0 - py2.py3 - none - any .whl ( 9.2 kB) Collecting cigam Using cached cigam - 0.0 . 3 - py3 - none - any .whl ( 3.8 kB) Collecting pyelftools Using cached pyelftools - 0.26 - py2.py3 - none - any .whl ( 136 kB) Building wheels for collected packages: uiautomator2, adbutils, wrapt Building wheel for uiautomator2 (setup.py) ... done Created wheel for uiautomator2: filename = uiautomator2 - 2.11 . 2 - py3 - none - any .whl size = 215120 sha256 = 8032be5932e883f0be5a801c5faddd3f12e255c358a9e2cc1cb2c9b6a566054d Stored in directory: / Users / xxx / Library / Caches / pip / wheels / b1 / 9f / 74 / 6946b5ed784db80cf8d34b6ac17d6a343939e83850c2fd8a89 Building wheel for adbutils (setup.py) ... done Created wheel for adbutils: filename = adbutils - 0.8 . 2 - py3 - none - any .whl size = 24045 sha256 = d396c25ae608e43501584aa3986291527db7696d79540beb2f554a564fbf245a Stored in directory: / Users / xxx / Library / Caches / pip / wheels / 5a / 3e / 87 / e67829113fdd7e139f51181b2cd89c38484007434a6bb6c728 Building wheel for wrapt (setup.py) ... done Created wheel for wrapt: filename = wrapt - 1.12 . 1 - cp38 - cp38 - macosx_10_14_x86_64.whl size = 32570 sha256 = b8902938053f947a19d164c1d55344e45e231f00987f4169d86945c35d5fdde9 Stored in directory: / Users / xxx / Library / Caches / pip / wheels / 5f / fd / 9e / b6cf5890494cb8ef0b5eaff72e5d55a70fb56316007d6dfe73 Successfully built uiautomator2 adbutils wrapt Installing collected packages: six, certifi, chardet, idna, urllib3, requests, whichcraft, logzero, progress, decorator, py, retry, pyparsing, packaging, deprecation, xmltodict, cigam, pyelftools, apkutils2, adbutils, wrapt, Deprecated, Pillow, lxml, cached - property , uiautomator2 Successfully installed Deprecated - 1.2 . 10 Pillow - 7.2 . 0 adbutils - 0.8 . 2 apkutils2 - 1.0 . 0 cached - property - 1.5 . 1 certifi - 2020.6 . 20 chardet - 3.0 . 4 cigam - 0.0 . 3 decorator - 4.4 . 2 deprecation - 2.1 . 0 idna - 2.10 logzero - 1.5 . 0 lxml - 4.5 . 2 packaging - 20.4 progress - 1.5 py - 1.9 . 0 pyelftools - 0.26 pyparsing - 2.4 . 7 requests - 2.24 . 0 retry - 0.9 . 2 six - 1.15 . 0 uiautomator2 - 2.11 . 2 urllib3 - 1.25 . 10 whichcraft - 0.6 . 1 wrapt - 1.12 . 1 xmltodict - 0.12 . 0 |
然后写代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | # Function: Use uiautomator2 auto collect AliPay AntForest energy # Author: Crifan # Update: 20200827 import sys import os curFolder = os.path.abspath(__file__) parentFolder = os.path.dirname(curFolder) parentParentFolder = os.path.dirname(parentFolder) parentParentParentFolder = os.path.dirname(parentParentFolder) sys.path.append(curFolder) sys.path.append(parentFolder) sys.path.append(parentParentFolder) sys.path.append(parentParentParentFolder) from datetime import datetime,timedelta from datetime import time as datetimeTime import time import logging from libs.crifanLogging import loggingInit import uiautomator2 as u2 from uiautomator2.exceptions import XPathElementNotFoundError from uiautomator2 import UiObjectNotFoundError ################################################################################ # Const & Config & Settings ################################################################################ AndroidDeviceId_Xiaomi9 = "8c8a4d4d" LogRoot = "logs" OutputRoot = "output" ################################################################################ # Util Functions ################################################################################ def datetimeToStr(inputDatetime, format = "%Y%m%d_%H%M%S" ): """Convert datetime to string Args: inputDatetime (datetime): datetime value Returns: str Raises: Examples: datetime.datetime(2020, 4, 21, 15, 44, 13, 2000) -> '20200421_154413' """ datetimeStr = inputDatetime.strftime( format = format ) # print("inputDatetime=%s -> datetimeStr=%s" % (inputDatetime, datetimeStr)) # 2020-04-21 15:08:59.787623 return datetimeStr def getCurDatetimeStr(outputFormat = "%Y%m%d_%H%M%S" ): """ get current datetime then format to string eg: 20171111_220722 :param outputFormat: datetime output format :return: current datetime formatted string """ curDatetime = datetime.now() # 2017-11-11 22:07:22.705101 # curDatetimeStr = curDatetime.strftime(format=outputFormat) #'20171111_220722' curDatetimeStr = datetimeToStr(curDatetime) return curDatetimeStr def getFilenameNoPointSuffix(curFilePath): """Get current filename without point and suffix Args: curFilePath (str): current file path. Normally can use __file__ Returns: str, file name without .xxx Raises: Examples: input: /Users/xxx/pymitmdump/mitmdumpOtherApi.py output: mitmdumpOtherApi """ root, pointSuffix = os.path.splitext(curFilePath) curFilenameNoSuffix = root.split(os.path.sep)[ - 1 ] return curFilenameNoSuffix def initLogging(): curDatetimeStr = getCurDatetimeStr() # '20200827_xxxxxx' logFile = getFilenameNoPointSuffix(__file__) # 'AutoCollectAliPayAntForestEnery' # logFilename = "AutoCollectAliPayAntForestEnery_%s.log" % curDatetimeStr logFilename = "%s_%s.log" % (logFile, curDatetimeStr) # 'AutoCollectAliPayAntForestEnery_20200827_xxxxxx.log' logFullFile = os.path.join(LogRoot, logFilename) # 'logs/AutoCollectAliPayAntForestEnery_20200827_xxxxxx.log' loggingInit(logFullFile) ################################################################################ # Main ################################################################################ initLogging() d = u2.connect(AndroidDeviceId_Xiaomi9) d.debug = True logging.info( "d.info=%s" , d.info) |
已经可以实现:
基本的初始化了。
输出:
1 | 20200827 11:08:55 AutoCollectAliPayAntForestEnery.py:103 INFO d.info={ 'currentPackageName' : 'com.tencent.mm' , 'displayHeight' : 2135, 'displayRotation' : 0, 'displaySizeDpX' : 393, 'displaySizeDpY' : 851, 'displayWidth' : 1080, 'productName' : 'cepheus' , 'screenOn' : True, 'sdkInt' : 29, 'naturalOrientation' : True} |
接着,再去安装weditor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | (venv) xxx@xxx ~ / dev / crifan / python / AutoCollectAliPayAntForestEnery pip install weditor Collecting weditor Downloading weditor - 0.6 . 1 - py3 - none - any .whl ( 1.5 MB) |████████████████████████████████| 1.5 MB 268 kB / s Requirement already satisfied: six in . / venv / lib / python3. 8 / site - packages ( from weditor) ( 1.15 . 0 ) Requirement already satisfied: uiautomator2> = 2.10 . 1 in . / venv / lib / python3. 8 / site - packages ( from weditor) ( 2.11 . 2 ) Requirement already satisfied: cached - property in . / venv / lib / python3. 8 / site - packages ( from weditor) ( 1.5 . 1 ) Collecting facebook - wda> = 1.0 . 5 Downloading facebook_wda - 1.1 . 3 - py3 - none - any .whl ( 23 kB) Collecting tornado> = 4.3 Downloading tornado - 6.0 . 4.tar .gz ( 496 kB) |████████████████████████████████| 496 kB 15.7 MB / s Requirement already satisfied: logzero in . / venv / lib / python3. 8 / site - packages ( from weditor) ( 1.5 . 0 ) Requirement already satisfied: pillow in . / venv / lib / python3. 8 / site - packages ( from weditor) ( 7.2 . 0 ) Requirement already satisfied: packaging~ = 20.3 in . / venv / lib / python3. 8 / site - packages ( from uiautomator2> = 2.10 . 1 - >weditor) ( 20.4 ) Requirement already satisfied: whichcraft in . / venv / lib / python3. 8 / site - packages ( from uiautomator2> = 2.10 . 1 - >weditor) ( 0.6 . 1 ) Requirement already satisfied: adbutils< 1.0 ,> = 0.8 . 2 in . / venv / lib / python3. 8 / site - packages ( from uiautomator2> = 2.10 . 1 - >weditor) ( 0.8 . 2 ) Requirement already satisfied: progress~ = 1.3 in . / venv / lib / python3. 8 / site - packages ( from uiautomator2> = 2.10 . 1 - >weditor) ( 1.5 ) Requirement already satisfied: lxml> = 4.3 in . / venv / lib / python3. 8 / site - packages ( from uiautomator2> = 2.10 . 1 - >weditor) ( 4.5 . 2 ) Requirement already satisfied: Deprecated~ = 1.2 . 6 in . / venv / lib / python3. 8 / site - packages ( from uiautomator2> = 2.10 . 1 - >weditor) ( 1.2 . 10 ) Requirement already satisfied: requests in . / venv / lib / python3. 8 / site - packages ( from uiautomator2> = 2.10 . 1 - >weditor) ( 2.24 . 0 ) Requirement already satisfied: retry~ = 0.9 in . / venv / lib / python3. 8 / site - packages ( from uiautomator2> = 2.10 . 1 - >weditor) ( 0.9 . 2 ) Collecting attrdict~ = 2.0 . 1 Downloading attrdict - 2.0 . 1 - py2.py3 - none - any .whl ( 9.9 kB) Requirement already satisfied: pyparsing> = 2.0 . 2 in . / venv / lib / python3. 8 / site - packages ( from packaging~ = 20.3 - >uiautomator2> = 2.10 . 1 - >weditor) ( 2.4 . 7 ) Requirement already satisfied: apkutils2< 2.0 ,> = 1.0 . 0 in . / venv / lib / python3. 8 / site - packages ( from adbutils< 1.0 ,> = 0.8 . 2 - >uiautomator2> = 2.10 . 1 - >weditor) ( 1.0 . 0 ) Requirement already satisfied: deprecation< 3.0 ,> = 2.0 . 6 in . / venv / lib / python3. 8 / site - packages ( from adbutils< 1.0 ,> = 0.8 . 2 - >uiautomator2> = 2.10 . 1 - >weditor) ( 2.1 . 0 ) Requirement already satisfied: wrapt< 2 ,> = 1.10 in . / venv / lib / python3. 8 / site - packages ( from Deprecated~ = 1.2 . 6 - >uiautomator2> = 2.10 . 1 - >weditor) ( 1.12 . 1 ) Requirement already satisfied: chardet< 4 ,> = 3.0 . 2 in . / venv / lib / python3. 8 / site - packages ( from requests - >uiautomator2> = 2.10 . 1 - >weditor) ( 3.0 . 4 ) Requirement already satisfied: urllib3! = 1.25 . 0 ,! = 1.25 . 1 ,< 1.26 ,> = 1.21 . 1 in . / venv / lib / python3. 8 / site - packages ( from requests - >uiautomator2> = 2.10 . 1 - >weditor) ( 1.25 . 10 ) Requirement already satisfied: idna< 3 ,> = 2.5 in . / venv / lib / python3. 8 / site - packages ( from requests - >uiautomator2> = 2.10 . 1 - >weditor) ( 2.10 ) Requirement already satisfied: certifi> = 2017.4 . 17 in . / venv / lib / python3. 8 / site - packages ( from requests - >uiautomator2> = 2.10 . 1 - >weditor) ( 2020.6 . 20 ) Requirement already satisfied: decorator> = 3.4 . 2 in . / venv / lib / python3. 8 / site - packages ( from retry~ = 0.9 - >uiautomator2> = 2.10 . 1 - >weditor) ( 4.4 . 2 ) Requirement already satisfied: py< 2.0 . 0 ,> = 1.4 . 26 in . / venv / lib / python3. 8 / site - packages ( from retry~ = 0.9 - >uiautomator2> = 2.10 . 1 - >weditor) ( 1.9 . 0 ) Requirement already satisfied: xmltodict in . / venv / lib / python3. 8 / site - packages ( from apkutils2< 2.0 ,> = 1.0 . 0 - >adbutils< 1.0 ,> = 0.8 . 2 - >uiautomator2> = 2.10 . 1 - >weditor) ( 0.12 . 0 ) Requirement already satisfied: cigam in . / venv / lib / python3. 8 / site - packages ( from apkutils2< 2.0 ,> = 1.0 . 0 - >adbutils< 1.0 ,> = 0.8 . 2 - >uiautomator2> = 2.10 . 1 - >weditor) ( 0.0 . 3 ) Requirement already satisfied: pyelftools in . / venv / lib / python3. 8 / site - packages ( from apkutils2< 2.0 ,> = 1.0 . 0 - >adbutils< 1.0 ,> = 0.8 . 2 - >uiautomator2> = 2.10 . 1 - >weditor) ( 0.26 ) Building wheels for collected packages: tornado Building wheel for tornado (setup.py) ... done Created wheel for tornado: filename = tornado - 6.0 . 4 - cp38 - cp38 - macosx_10_14_x86_64.whl size = 417306 sha256 = f8b495f2bb9449e7ab91346980210755f5954218d68e238e76391842d160df62 Stored in directory: / Users / xxx / Library / Caches / pip / wheels / 88 / 79 / e5 / 598ba17e85eccf2626eab62e4ee8452895636cd542650d450d Successfully built tornado Installing collected packages: attrdict, facebook - wda, tornado, weditor Successfully installed attrdict - 2.0 . 1 facebook - wda - 1.1 . 3 tornado - 6.0 . 4 weditor - 0.6 . 1 |
然后去启动试试
1 | python -m weditor |
打开:
看到手机中界面。

至此,开发环境搭建好了。
转载请注明:在路上 » 【已解决】Mac中搭建uiautomator2的开发环境