1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一篇清晰易懂的Python操控手機(jī)APP攻略!

        共 5574字,需瀏覽 12分鐘

         ·

        2020-11-29 00:45


        閱讀全文大概需要 9 分鐘。


        最近由于一直處于在家遠(yuǎn)程辦公狀態(tài),新的一年,很多公司、部門(mén)事情要處理,比較忙,公號(hào)原創(chuàng)文的創(chuàng)作速度明顯減慢!親愛(ài)的讀者們,你們都等著急了吧。


        最近經(jīng)??吹皆S多公號(hào)在推一些Python操作手機(jī)App自動(dòng)化的文章,例如自動(dòng)刷抖音、玩釣魚(yú)之類(lèi)的。而這些Android自動(dòng)化項(xiàng)目無(wú)一例外都需要部署ADB環(huán)境。至于什么是ADB,網(wǎng)上很容易可以檢索一堆介紹(包括在我即將上市的新書(shū)中也會(huì)單獨(dú)有一小節(jié)介紹ADB原理和常用操作),如果正在文的你,是自動(dòng)化新手,對(duì)ADB還不了解。


        不妨可以先通過(guò)官方的介紹,了解一下ADB是什么,這里我就不過(guò)多介紹了。

        https://developer.android.google.cn/studio/command-line/adb


        為了使沒(méi)有安卓開(kāi)發(fā)經(jīng)驗(yàn)的人也能快速學(xué)會(huì)用Python操作手機(jī)App,我從Android SDK部署、ADB基礎(chǔ)應(yīng)用、Python操作手機(jī)等方面入手寫(xiě)了這篇文章,當(dāng)然也不會(huì)寫(xiě)的太詳細(xì),重點(diǎn)還是使大家對(duì)ADB的使用有一個(gè)直觀的認(rèn)識(shí),這樣大家在玩Android App自動(dòng)化項(xiàng)目時(shí)也會(huì)更輕松一些。


        PS: 本文涉及的各類(lèi)操作可能有多種實(shí)現(xiàn)方法,我只會(huì)提及其中一種,而且采取的方法可能并不是最優(yōu)的方法。

        1. Android SDK下載和配置

        說(shuō)起Android SDK工具,那還真是不少,有SDK Tools、SDK、Platform-tools等等,這里我推薦SDK Tools,進(jìn)入https://www.androiddevtools.cn/這個(gè)網(wǎng)站點(diǎn)擊Android SDK工具菜單,找到下圖中的界面,選擇自己對(duì)應(yīng)的系統(tǒng)版本(zip版)下載。(比如此處我的是使用Mac版)


        將下載后的文件解壓縮,如下圖所示。


        接著就是配置環(huán)境變量了,把a(bǔ)ndroid-sdk目錄下的platform-tools和tools文件夾添加到系統(tǒng)變量中,這一步屬于常規(guī)操作,我就不再演示了。


        執(zhí)行完以上步驟,ADB環(huán)境就算配置完畢了,之后如果手機(jī)是通過(guò)USB連接電腦的,需要先開(kāi)啟手機(jī)的開(kāi)發(fā)者選項(xiàng)、開(kāi)啟USB調(diào)試、然后用USB線(xiàn)將手機(jī)跟電腦連接。當(dāng)然,也可以通過(guò)WIFI連接。


        ADB WIFI連接方法:

        • 手機(jī)與電腦用數(shù)據(jù)線(xiàn)連接,打開(kāi)命令行窗口,執(zhí)行:

        adb tcpid 5555
        • 斷開(kāi)數(shù)據(jù)線(xiàn)連接,執(zhí)行:

         adb connect xxx.xxx.xxx.xxx(手機(jī)ip)


        PS: 至于如何查看手機(jī)IP,我相信我公號(hào)讀者都知道的,就不再介紹了。


        本文以夜神模擬器作為被操作設(shè)備,啟動(dòng)夜神模擬器后,如下所示。

        輸入adb devices查看設(shè)備列表。如果提示類(lèi)似這種的錯(cuò)誤信息:

        adb server version (36) doesn't match this client (40); killing...,


        說(shuō)明當(dāng)前adb server與adb client版本不匹配所致。解決方法也很簡(jiǎn)單:統(tǒng)一adb版本號(hào)即可,如將sdk下面的adb拷貝一份到夜神模擬器相應(yīng)的目錄下。


        解決上述問(wèn)題后,重新獲取設(shè)備列表。

        ???adb?devicesList of devices attached127.0.0.1:62001  device

        2. ADB的一些基本操作

        雖說(shuō)是基本操作,但ADB的命令也還是挺多的,說(shuō)多了大家一時(shí)也難以消化。所以我這里只列舉幾個(gè)操作手機(jī)APP常用的指令,都是一些基本的操作。


        1).顯示所有包名

        adb shell pm list packages

        這個(gè)指令會(huì)羅列出手機(jī)已經(jīng)安裝的所有應(yīng)用包的名稱(chēng),如果后綴加上參數(shù)-s,則會(huì)列出所有的系統(tǒng)應(yīng)用的名稱(chēng),而加上后綴參數(shù)-3則會(huì)列出所有第三方應(yīng)用名稱(chēng),如下:

        ??adb?shell?pm?list?package?-3package:io.appium.settingspackage:com.example.android.contactmanagerpackage:com.kugou.android



        2).顯示活動(dòng)程序

        adb?shell?dumpsys?activity?activities

        這個(gè)指令能夠獲取到當(dāng)前手機(jī)系統(tǒng)中正在運(yùn)行的程序包的名稱(chēng),例如打開(kāi)模擬器中已安裝的酷狗音樂(lè)App,運(yùn)行上述指令就會(huì)獲取到下述信息:

        ???~?adb?shell?dumpsys?activity?activities    Running activities (most recent first):      TaskRecord{4a9fe700 #2 A=android.task.kugou U=0 sz=1}        Run #0: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2}
        mResumedActivity: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2} mLastPausedActivity: ActivityRecord{4a921424 u0 com.kugou.android/.app.splash.SplashActivity t2 f}
        mFocusedActivity: ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2} mDismissKeyguardOnNextActivity=false mFocusedStack=ActivityStack{4a9e1488 stackId=1, 1 tasks} mStackState=STACK_STATE_HOME_IN_BACK
        Recent tasks: * Recent #0: TaskRecord{4a9fe700 #2 A=android.task.kugou U=0 sz=1} numActivities=1 rootWasReset=true userId=0 mTaskType=0 numFullscreen=1 mOnTopOfHome=true affinity=android.task.kugou intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.kugou.android/.app.splash.SplashActivity} realActivity=com.kugou.android/.app.splash.SplashActivity Activities=[ActivityRecord{4a96e0c8 u0 com.kugou.android/.app.MediaActivity t2}] askedCompatMode=false lastThumbnail=null lastDescription=null????lastActiveTime=446142?(inactive?for?13s)

        上述信息被刪除了一部分,其中realActivity后面的參數(shù)就是當(dāng)前正在運(yùn)行的Activity名稱(chēng),稍微留意一下就會(huì)發(fā)現(xiàn),這個(gè)名稱(chēng)相比上面的包名稱(chēng)要更加詳細(xì)一些,實(shí)際在獲取當(dāng)前運(yùn)行活動(dòng)的App包名和Activity名方法還有很多種,比如:

        adb shell dumpsys activity | grep mFocusedActivity

        至于這個(gè)名稱(chēng)有什么用,我們馬上就會(huì)提到。


        3).啟動(dòng)應(yīng)用程序

        adb shell am start -n 要啟動(dòng)的應(yīng)用Activity名稱(chēng)

        這里所使用的Activity名稱(chēng)就是剛才獲取到的realActivity后面的參數(shù),使用這個(gè)指令時(shí)要注意,啟動(dòng)APP一定要使用上一條命令獲取到的Activity名稱(chēng),不能使用adb shell pm list packages命令獲取到的包名稱(chēng)。例如,我們?nèi)绻獑?dòng)酷狗音樂(lè),可以使用命令:

        adb?shell?am?start?-n?com.kugou.android/.app.splash.SplashActivity


        如無(wú)意外,執(zhí)行上述命令后,你會(huì)聽(tīng)到“Hello 酷狗” 熟悉的聲音。


        而如果使用了下面這條命令是無(wú)法順利啟動(dòng)應(yīng)用的:

        adb?shell?am?start?-n?com.kugou.android



        4).停止應(yīng)用程序

        adb shell am force-stop 要停止的應(yīng)用名稱(chēng)


        這條指令會(huì)強(qiáng)制停止指定的應(yīng)用程序,跟程序的啟動(dòng)略有差別,在停止應(yīng)用時(shí),使用adb shell pm list packages命令獲取到的包名稱(chēng)就可以了。還是以小米的游戲中心為例,停止應(yīng)用使用以下指令:

        adb?shell?am?force-stop?com.kugou.android


        5).點(diǎn)擊指定位置

        adb?shell?input?tap?x?y

        這條指令就很好理解了,模擬點(diǎn)擊手機(jī)屏幕中的某個(gè)位置,(x,y)是對(duì)應(yīng)的位置坐標(biāo)。在ADB中默認(rèn)手機(jī)屏幕的左上角坐標(biāo)是(0,0),右下角坐標(biāo)是(x-max,y-max)。


        6).滑動(dòng)手機(jī)屏幕

        adb?shell?input?swipe?x_start?y_start?x_end?y_end

        這條指令的本質(zhì)是使得坐標(biāo)為(x_start, y_start)的點(diǎn)移動(dòng)到(x_end, y_end)的坐標(biāo)位置,以此來(lái)實(shí)現(xiàn)屏幕滑動(dòng)的效果。


        7).輸入文字信息


        adb?shell?input?text?需要輸入的字符

        這條指令沒(méi)什么好說(shuō)明的,選定對(duì)應(yīng)位置,然后輸入對(duì)應(yīng)的字符即可。


        8).模擬手機(jī)按鍵


        adb?shell?input?keyevent?code

        現(xiàn)在的大部分手機(jī)除了常規(guī)鍵盤(pán)字符以外還有一些特殊按鍵,例如HOME鍵、音量+/-,以及軟鍵盤(pán)中有時(shí)會(huì)出現(xiàn)的確認(rèn)鍵等等,這些按鍵的模擬就可以通過(guò)上面這條指令來(lái)實(shí)現(xiàn)。

        其中code對(duì)應(yīng)的是特殊鍵的編號(hào),下面舉幾個(gè)常用的例子(其他的特殊鍵還有很多):

        • 3對(duì)應(yīng)的是HOME鍵

        • 24對(duì)應(yīng)的是音量+

        • 25對(duì)應(yīng)的是音量-

        • 66對(duì)應(yīng)的是確認(rèn)鍵

        • 4對(duì)應(yīng)返回鍵

        • 26對(duì)應(yīng)電源鍵

        • 84對(duì)應(yīng)搜索鍵


        KeyEvent官方文檔可見(jiàn):

        https://developer.android.google.cn/reference/android/view/KeyEvent



        9).獲取元素位置

        細(xì)心的朋友現(xiàn)在可能會(huì)發(fā)現(xiàn),上面提到的一些關(guān)于模擬點(diǎn)擊、模擬輸入的命令,都涉及到手機(jī)元素定位的問(wèn)題,那么我們?cè)趯?shí)踐中如何確定具體的坐標(biāo)位置和元素信息呢?如果是Android端,這里一般建議使用uiautomatorviewer這個(gè)工具,它會(huì)隨著SDK Tools一起安裝,就在tools目錄下。

        來(lái)看下面這幅圖,手機(jī)連接成功后,點(diǎn)擊左上角的綠色圖標(biāo)就會(huì)獲取到手機(jī)的當(dāng)前頁(yè)面信息,然后在屏幕左側(cè)可以點(diǎn)選任意位置或者元素,相關(guān)信息會(huì)在右側(cè)屏幕中顯示。

        是不是感覺(jué)跟用chrome分析網(wǎng)頁(yè)非常類(lèi)似,有了這些信息,再使用上面提到的幾款指令操作手機(jī)就不是問(wèn)題了。


        如果上述命令你覺(jué)得介紹的還不夠多,不妨繼續(xù)看看ADB官方文檔介紹。

        https://developer.android.google.cn/studio/command-line/adb?hl=zh_cn

        3. Python操作手機(jī)App

        通常來(lái)講,如果我們單純想通過(guò)ADB命令來(lái)操控手機(jī),一般建議借助Python腳本使其批量化、自動(dòng)化運(yùn)行。

        Python執(zhí)行終端指令可以借助os.system()函數(shù),我們來(lái)看下面這段代碼:

        ```pythondef execute(cmd):  adb_str="adb shell {}".format(cmd)  print(adb_str)  os.system(adb_str)
        if __name__ == '__main__': execute("am start -n com.kugou.android/.app.splash.SplashActivity") time.sleep(3) execute("input tap 263 515") ```

        當(dāng)然上面這段代碼實(shí)際上并沒(méi)有任何意義,主要是為了給大家簡(jiǎn)單演示一下。

        4. 最后

        今天的文章講到的都是ADB的入門(mén)級(jí)操作,可能有一些自動(dòng)化基礎(chǔ)的人會(huì)說(shuō),我平常都不屑直接用ADB這種小命令,如果需要實(shí)現(xiàn)自動(dòng)化,都是直接搬出像Appium、Airtest這類(lèi)型的框架。


        但其實(shí)在Android系,任何的第三方開(kāi)源或商業(yè)自動(dòng)化框架,本質(zhì)上在驅(qū)動(dòng)連接手機(jī)這塊,都離不開(kāi)ADB。


        回復(fù)關(guān)鍵字“簡(jiǎn)明python ”,立即獲取入門(mén)必備書(shū)籍簡(jiǎn)明python教程》電子版

        回復(fù)關(guān)鍵字爬蟲(chóng)”,立即獲取爬蟲(chóng)學(xué)習(xí)資料

        python入門(mén)與進(jìn)階
        每天與你一起成長(zhǎng)

        推薦閱讀


        點(diǎn)贊和在看就是最大的支持??

        瀏覽 33
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            午夜精品一区二区三区文 | 欧美老人性色一级毛片 | 午夜性情| 日本在线观看一区 | 免费福利在线观看 | 久久久国产无码精品 | 淫秽视频免费看 | 日韩AV中文字幕在线 | 欧美一区二区三区影视 | 精品少妇一区二区三区在线观看 |