自動化控制APP不管是在工作還是生活方面,都可以幫助我們高效地完成任務,節省時間和精力。本文主要介紹自動化控制APP的3種常用方式。
1、Python + adb
這種方式需要對Android有一些基本的瞭解。adb是一種用於除錯Android應用程式的工具。使用Python和adb可以輕鬆實現自動化控制移動端APP。
1.1、特點
這種方式最簡單,但是控制效果也最粗糙。不同的手機對應的元素x,y軸的位置不同,所以不適合操作不同尺寸的所有手機。這種方式也只適合於開發者,對於普通使用者使用成本過高。
1.2、使用步驟
1、安裝Android SDK
具體細節略過,自行google安裝。安裝完畢後,配置好ANDROID_HOME
環境變數。
2、安裝Python
具體細節略過,自行google安裝。
3、開啟手機的開發者模式
同時開啟USB除錯
和顯示指標位置
。
4、此時操作手機
可以看到有2根軸,同時最上方會顯示頁面焦點元素的x,y軸
位置。
5、使用Python程式碼+adb簡單控制APP
import time
import subprocess
# 點選某個位置
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input tap 564 1861")
time.sleep(2)
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input tap 188 980")
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input tap 869 1808")
time.sleep(4)
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input tap 320 965")
# 輸入資料
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input text 15850501595")
# 按返回鍵
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input keyevent KEYCODE_BACK")
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input tap 512 1120")
# 輸入資料
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input text 15850501595")
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input keyevent KEYCODE_BACK")
subprocess.getoutput(f"adb -s Y2J7N17C27000069 shell input tap 843 1824")
6、adb常用命令
- 檢視手機裝置:adb devices
- 檢視裝置型號:adb shell getprop ro.product.model
- 檢視電池資訊:adb shell dumpsys battery
- 檢視裝置ID:adb shell settings get secure android_id
- 檢視裝置IMEI:adb shell dumpsys iphonesubinfo
- 檢視Android版本:adb shell getprop ro.build.version.release
- 檢視手機網路資訊:adb shell ifconfig
- 檢視裝置日誌:adb logcat
- 重啟手機裝置:adb reboot
- 安裝一個apk:adb install /path/demo.apk
- 解除安裝一個apk:adb uninstall <package>
- 檢視系統執行程序:adb shell ps
- 檢視系統磁碟情況:adb shell ls /path/
- 手機裝置截圖:adb shell screencap -p /sdcard/aa.png
- 手機檔案下載到電腦:adb pull /sdcard/aa.png ./
- 電腦檔案上傳到手機:adb push aa.png /data/local/
- 手機裝置錄影:adb shell screenrecord /sdcard/ab.mp4
- 手機螢幕解析度:adb shell wm size
- 手機螢幕密度:adb shell wm density
- 手機螢幕點選:adb -s xxxxxxxxxxxxxxxxxxxxxxxxx shell input tap xvalue yvalue
- 手機螢幕滑動:adb shell input swipe 1000 1500 200 200
- 手機螢幕帶時間滑動:adb shell input swipe 1000 1500 0 0 1000
- 手機文字輸入:adb shell input text xxxxx
- 手機鍵盤事件:adb shell input keyevent xxxx
2、Android無障礙
這種方式是使用Android無障礙功能實現自動控制APP的效果。需要開啟Android無障礙功能,然後編寫Android程式碼來控制另外的APP應用。
2.1、特點
這種方式需要開發者對Android有一些開發經驗。優點是:可以用Android開發出獨立的apk安裝包,安裝到普通使用者手機裡,方便使用者使用。
2.2、使用步驟
1、安裝Android SDK、安裝Android Studio
具體細節略過,自行google安裝。安裝完畢後,配置好ANDROID_HOME
環境變數。
2、使用Android自帶的tool工具
Android在level-21
和之前的低版本,安裝完畢後有一個tool
工具包,但是高版本移除了此工具包。所以在安裝SDK時還需要加上level-21
版本。
使用Android自帶的tool
工具,主要是為了檢視APP的頁面佈局和元素。但是monitor
已經不可用了,只能使用uiAutormatorViewer
。
3、利用uiAutormatorViewer
工具找到元素資訊
用uiAutormatorViewer
檢視頁面元素所在的x,y軸
的佈局。然後編寫Android程式碼控制點選等效果。此工具顯示出來的介面如下:
4、程式碼示例
在AndroidManifest.xml
程式碼裡配置無障礙service,然後實現AccessibilityService
類,實現onAccessibilityEvent
方法。後續手機介面如果有變動,內部會自動觸發呼叫onAccessibilityEvent
方法。
public class XXXXXAccessibilityService extends AccessibilityService {
@Override
public void onInterrupt() {
}
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
Log.e("無障礙", "來了");
// 建立執行緒去執行任務
new Thread(new Runnable() {
@Override
public void run() {
// 後續程式碼
}
}).start();
}
}
無障礙功能本身也提供了多種尋找頁面元素的方法,比如:
/**
* 根據ID找元素
*/
private AccessibilityNodeInfo findNodeById(String id) {
AccessibilityNodeInfo root = getRootInActiveWindow();
if (root == null) {
return null;
}
List<AccessibilityNodeInfo> nodeList = root.findAccessibilityNodeInfosByViewId(id);
if (nodeList != null) {
for (int i = 0; i < nodeList.size(); i++) {
AccessibilityNodeInfo node = nodeList.get(i);
if (node != null) {
return node;
}
}
}
return null;
}
3、Python + Appium
Python加Appium可以組合成為一種自動化測試工具,可以用於測試和自動化控制移動端APP。
3.1、特點
這種方式可以自動化操作APP,但是使用者基本是開發者,普通使用者很難完成這一系列的操作。但是也有個優點,有些頁面標記為不可點選的元素,透過這種方式是可以點選的。
Appium提供了更多的尋找頁面元素的方式,比如uiautomator、xpath、id等。
3.2、使用步驟
1、安裝Python
此處略過步驟,自行google。
2、安裝Appium
老版本的Appium直接包含了Appium server
和 Appium inspector
,新版本的Appium安裝完畢後,需要在單獨安裝Appium inspector
。透過Appium inspector
可以檢視手機當前頁面的xml佈局。
# 安裝appium
npm i --location=global appium
# 安裝自動檢視UI頁面的驅動
appium uiautomator2driver
# 安裝inspector
下載安裝地址:https://github.com/appium/appium-inspector?tab=readme-ov-file
# 啟動server
appium server --use-driver=uiautomator2
# 安裝客戶端,程式碼裡會使用 appium-python-client 與server通訊,
# 然後server在將指令下發到手機裡的appium端
pip3 install appium-python-client
3、使用過程
安裝完畢後,就可以透過Python程式碼控制App了。
-
啟動Appium-server,
appium uiautomator2driver
。 -
啟動Appium inspector,配置好手機,然後點選
start session
,介面如下: -
透過Appium inspector檢視頁面佈局和元素,找出目標元素。
-
編寫程式碼
device_app_info = AppiumOptions()
# 作業系統
device_app_info.set_capability('platformName', 'Android')
# 作業系統版本
# device_app_info.set_capability('platformVersion', '10')
device_app_info.set_capability('platformVersion', '9')
# 裝置名稱
# device_app_info.set_capability('deviceName', '46F4C19402000952')
device_app_info.set_capability('deviceName', 'Y2J7N17C27000069')
# app package
device_app_info.set_capability('appPackage', 'cn.damai')
# app activity name
device_app_info.set_capability('appActivity', '.launcher.splash.SplashMainActivity')
# 使用uiautomator2驅動
device_app_info.set_capability('automationName', 'UiAutomator2')
# 連線appium server,server地址檢視appium啟動資訊
driver = webdriver.Remote('http://127.0.0.1:4723', options=device_app_info)
# 找到元素,控制元素
buy_btn = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("cn.damai:id/trade_project_detail_purchase_status_bar_container_fl")')
if buy_btn:
buy_btn.click()
4、總結
- 以上3種方式都可以用於自動化控制移動端APP,但是又各有適用的場景。讀者需根據實際情況選擇其中的一種方式來實現自動化控制。
- 以上的方式也可以認為是一種爬蟲。還有一些自動化的方式是:先
分析api請求
,然後逆向分析js
或者逆向分析apk包
,破解其中的加密方式
。然後直接呼叫api,這種方式後面單獨講解。
本篇完結!歡迎點贊 關注 收藏!!!
原文連結:https://mp.weixin.qq.com/s/KVylEo2riiRL8yWHgPloBA、http://www.mangod.top/articles/2024/04/24/1713970503394.html
======>>>>>> 關於我 <<<<<<======