用Python操控手機APP攻略一

【轉自https://mp.weixin.qq.com/s/m5NVrayleQWztpJNbZ7mEA爲了防止文章失效特此備份】

史上最全的用Python操控手機APP攻略!建議收藏!

原創 大劉 菜鳥學Python 2019-12-06

最近經常看到用Python操作手機APP的項目,例如抖音、閒魚之類的,看完後發現這些項目無一例外需要部署ADB環境。至於什麼是ADB,很多大神都講過,只是寫得比較專業,我等菜鳥看完還是雲裏霧裏。

 

 

爲了使沒有安卓開發經驗的人也能快速學會用Python操作手機APP,我從Android SDK部署、ADB基礎應用、Python操作手機等方面入手寫了這篇文章,目的是使大家對ADB的使用有一個直觀的認識,這樣在玩上面提到的這些項目時會更輕鬆一些。

事先聲明:本文涉及的各類操作可能有多種實現方法,我只會提及其中一種,而且我採取的方法很有可能不是最優的方法。

 

1.Android SDK下載和部署

 

說起Android SDK工具,那還真是不少,有SDK Tools、SDK、Platform-tools等等,這裏我推薦SDK Tools,進入https://www.androiddevtools.cn/這個網站可以看到下圖中的界面,選擇自己對應的系統版本(zip版)下載。

將下載後的文件解壓縮,運行其中的SDK Manager.exe文件,進入Packages安裝管理界面,對於新手朋友們我建議直接使用默認選項,然後點擊右下角的 Install XX packages 按鈕,整個下載安裝過程大概需要幾十分鐘,具體時間跟個人網速有關。

接着就是配置環境變量了,把android-sdk目錄下的platform-tools和tools文件夾添加到系統變量中,這一步屬於常規操作,我就不再演示了。

執行完以上步驟,ADB環境就算配置完畢了,之後要做的就是開啓手機的開發者選項、開啓USB調試、用usb線將手機跟電腦鏈接。

下面進入關鍵的一步——通過ADB測試手機是否連接成功。進入系統終端,輸入adb devices指令,如果出現下圖中的結果,就說明剛纔的環境部署成功了,其中device前面的是連接的設備號。

如果連接測試不成功,例如找不到設備或者設備連接不上,可以依次嘗試關閉並再次開始調試、重啓手機、重啓電腦、插拔USB線等操作,通常都可以解決。

 

 

2.ADB的一些基本操作

 

雖說是基本操作,但ADB的命令也還是挺多的,說多了大家一時也難以消化。所以我這裏只列舉幾個操作手機APP常用的指令,都是一些基本的操作。

1).顯示所有包名

adb shell pm list packages

這個指令會羅列出手機已經安裝的所有應用包的名稱,如果後綴加上參數-s,則會列出所有的系統應用的名稱(下圖),而加上後綴參數-3則會列出所有第三方應用名稱。

2).顯示活動程序

adb shell dumpsys activity activities

這個指令能夠獲取到當前手機系統中正在運行的程序包的名稱,例如當我在手機中啓動小米手機的“遊戲中心”,運行上述指令就會獲取到下圖中的信息:

圖中realActivity後面的參數就是當前正在運行的Activity名稱,稍微留意一下就會發現,這個名稱相比上面的包名稱要更加詳細一些,至於這個名稱有什麼用,我們馬上就會提到。

3).啓動應用程序

adb shell am start -n 要啓動的應用Activity名稱

這裏所使用的Activity名稱就是剛纔獲取到的realActivity後面的參數,使用這個指令時要注意,啓動APP一定要使用上一條命令獲取到的Activity名稱,不能使用adb shell pm list packages命令獲取到的包名稱。例如,我們如果要啓動小米的遊戲中心,可以使用命令:

 

adb shell am start -n com.xiaomi.gamecenter/.ui.MainTabActivity

而如果使用了下面這條命令是無法順利啓動應用的:

adb shell am start -n com.xiaomi.gamecenter

 

4).停止應用程序

adb shell am force-stop 要停止的應用名稱

這條指令會強制停止指定的應用程序,跟程序的啓動略有差別,在停止應用時,使用adb shell pm list packages命令獲取到的包名稱就可以了。還是以小米的遊戲中心爲例,停止應用使用以下指令:

adb shell am force-stop com.xiaomi.gamecenter

5).點擊指定位置

adb shell input tap x y

這條指令就很好理解了,模擬點擊手機屏幕中的某個位置,(x,y)是對應的位置座標。在ADB中默認手機屏幕的左上角座標是(0,0),右下角座標是(xmax,ymax)。

這裏強調一點:使用模擬點擊功能必須設置手機允許通過USB調試修改權限或點擊模擬,下文中的滑動手機屏幕、輸入文字信息等功能也需要進行同樣設置。

6).滑動手機屏幕

adb shell input swipe x_start y_start x_end y_end

這條指令的本質是使得座標爲(x_start, y_start)的點移動到(x_end, y_end)的座標位置,以此來實現屏幕滑動的效果。

7).輸入文字信息

adb shell input text 需要輸入的字符

這條指令沒什麼好說明的,選定對應位置,然後輸入對應的字符即可。

8).模擬手機按鍵

adb shell input keyevent X

現在的大部分手機除了常規鍵盤字符以外還有一些特殊按鍵,例如HOME鍵、音量+/-,以及軟鍵盤中有時會出現的確認鍵等等,這些按鍵的模擬就可以通過上面這條指令來實現。

其中X對應的是特殊鍵的編號,下面舉幾個常用的例子(其他的特殊鍵還有很多):

  • 3對應的是HOME鍵

  • 24對應的是音量+

  • 25對應的是音量-

  • 66對應的是確認鍵

 

9).獲取元素位置

細心的朋友現在可能會發現,上面提到的一些關於模擬點擊、模擬輸入的命令,都涉及到手機元素定位的問題,那麼我們在實踐中如何確定具體的座標位置和元素信息呢?這裏我提議使用uiautomatorviewer.bat這個工具,它會隨着SDK Tools一起安裝,就在tools目錄下。

來看下面這幅圖,手機連接成功後,點擊左上角的綠色圖標就會獲取到手機的當前頁面信息,然後在屏幕左側可以點選任意位置或者元素,相關信息會在右側屏幕中顯示。

是不是感覺跟用chrome分析網頁非常類似,有了這些信息,再使用上面提到的幾款指令操作手機就不是問題了。

3Python操控手機App

1).命令行操控

前面講了ADB操控手機的一些基本操作,只有理論未免太枯燥,現在我們做個小試驗來看看效果。

我們還是以小米的遊戲中心爲例,使用ADB依次完成以下任務:

  • 切換到“網遊”選項卡,指令:adb shell input tap 400 263

  • 選中搜索欄,指令:adb shell input tap 776 139

  • 輸入“wangzherongyao”,指令:adb shell input text wangzherongyao

  • 點擊確認鍵,指令:adb shell input keyevent 66

  • 進入王者榮耀遊戲頁面,指令:adb shell input tap 600 500

爲了錄製方便,我把手機屏幕同步到電腦中,來看看試驗效果:

忽略即可(手機同步電腦-視頻)

2).Python腳本操控

從上面的演示視頻看,使用ADB操作手機APP還算比較成功,但是如果像剛纔那樣逐條輸入指令,可能還不如直接操作手機來的方便,那麼我們就需要藉助Python腳本使其批量化、自動化運行。

Python執行終端指令可以藉助os.system()函數,我們來看下面這段代碼:

 

上面代碼所實現的功能跟我們之前演示的基本一樣,主要增加了一個打開遊戲中心的操作、簡化了一些中間步驟,再來看這次的操作過程(下面的視頻),是不是比剛纔流暢的多了?

忽略(Python演示操作-視頻)

 


小結:

今天的文章講到的都是ADB的入門級操作,不懂ADB很多跟安卓APP有關的實踐都沒辦法實現,但是僅僅學會這些還不足以實現一個像樣的控制腳本,想要學習更牛逼的操作,可以去參考我在文章開頭提到的一些項目。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章