移動端自動化 AutoJS 快速入門指南
1. 前言
大家好,我是安果!
之前寫過很多 App 端自動化的文章,大都基於 Appium、Airtest、無障礙服務等技術來實現的
其中,Appium 和 Airtest 編寫的自動化指令碼都依賴於 PC 端執行,沒有辦法直接執行在移動端;無障礙服務需要單獨建立一個 Android 專案,沒有完整的使用文件,使用起來有一定的門檻
從本篇文章開始,介紹一款可以直接執行在移動端的自動化工具:AutoJS
2. AutoJS介紹
AutoJS 類似於按鍵精靈,它是 Android 平臺上的一款自動化工具,它通過編寫JavaScript指令碼,結合系統的「 無障礙服務 」對 App進行自動化操作
官方文件:
它的優勢包含:
-
使用 JS 編寫指令碼,程式碼可讀性強
-
指令碼檔案體積小,可以打包成 APK 直接安裝
-
擁有豐富的 UI 元件用於構建 GUI 介面
-
非 Root 裝置也能完成自動化操作,可以擺脫 PC 直接執行
-
提供多種元素定位方式,可以適配各種機型
-
官方文件非常詳細,學習成本低
3. 準備
AutoJS 擁有多個版本,其中最常用的兩個版本分別是:Auto.js Pro、Auto.js 4.1.1 Beta
PS:由於某些原因,AutoJS 作者現在只對Auto.jsPro版本進行維護,並且Auto.jsPro對部分主流 App 進行了限制
後面的文章都是以Auto.js 4.1.1 Beta為例進行講解( 文末有提供下載方式 )
首先,下載 VS Code 軟體和 2 個外掛
2 個外掛包含:
-
Auto.js-VSCodeExt
-
Auto.js-VSCodeExt-Fixed
其中,Auto.js-VSCodeExt-Fixed 對外掛Auto.js-VSCodeExt 進行了部分優化,更加方便我們除錯指令碼
然後,使用 VS Code 快捷鍵「Ctrl/Command + Shift + P」,選擇「Auto.js:Start Server」開啟AutoJS 服務
接著,在真機或模擬器安裝 AutoJS 應用及 AutoJS 打包工具應用
PS:如果使用模擬器,推薦使用網易 MuMu 或雷電模擬器
開啟 AutoJS應用,首次進入應用關閉更新提示對話方塊,並按照指引開啟「無障礙服務」
在軟體主介面,點選左上角滑出側邊欄,依次開啟無障礙服務、前臺服務、懸浮窗
前臺服務用於提升服務的存活率,防止服務被回收掉
懸浮窗會懸浮在任意介面之上,提供一些快捷功能操作,具體包含:
-
檔案專案列表
會展示示例程式碼及自己編寫的指令碼、資料夾,可以快速完成指令碼編輯、執行、定時任務、打包等操作
-
指令碼錄製
錄製指令碼,僅適用於 Root 後的裝置,由於它基於座標點,適配性不強,所以很少使用
-
元素控制元件定位
針對當前介面進行佈局控制元件分析、佈局層次分析
-
關閉正在執行的指令碼
一鍵停止所有正在執行的指令碼任務
-
更多設定
可以快速進入到「無障礙服務」頁面、檢視當前應用包名及 Activity 名稱等
最後,選中軟體側邊欄中的「連線電腦」這一項,在對話方塊中輸入 PC的 ip 地址
PS:AutoJS 連線電腦時如果沒有報錯,VS Code通知欄和 OUTPUT 會展示裝置連線成功的訊息
4. 實戰一下
在完成上面的準備工作後,我們就可以在 VSCode 中使用 JS 編寫自動化指令碼了
這裡以自動刷抖音短視訊為例
首先,使用「 auto.waitFor() 」確保無障礙服務開啟成功
然後,使用launchApp+應用名稱,快速啟動抖音 App
接著使用介面元素內容 +waitFor() 方法等待元素出現,代表介面載入完成
最後,使用 Root +Swipe + 座標點模擬介面滑動
PS:這裡為了方便,直接使用 Root 裝置的 API 方法,如果是非 Root 裝置,可以採用官方提供的滑動 API 或控制元件中心座標點選事件來實現
完整程式碼如下:
auto.waitFor()
//開啟抖音App
var appName = "抖音";
(appName);
//等待進入主介面成功
text("首頁").waitFor();
toast("準備開始滑動")
//滑動(Root+座標點)
while (true) {
Swipe(200, 1000, 210, 400, 500);
//休息5s鍾
sleep(5000);
toast("繼續滑動。。。")
}
5. 最後
本篇文章介紹了 AutoJS最基礎的使用步驟,並通過一個簡單的例項講解其用法
文中提到的軟體我已經上傳到後臺,回覆關鍵字「 autojs 」即可以獲取
如果你覺得文章還不錯,請大家點贊、分享、留言下,因為這將是我持續輸出更多優質文章的最強動力!
推薦閱讀
Postman 如何除錯加密介面?