前端工程師用Node.js + Appium實(shí)現(xiàn)APP自動化
簡介
最近在使用Appium做爬蟲功能,網(wǎng)上全是python + Appium的教程,Appium也支持Node.js開發(fā),作為前端工程師使用Node.js + Appium實(shí)現(xiàn)了自動化爬蟲功能。
零零散散折騰了小兩天的時間,踩了一些小坑,把流程和坑點(diǎn)整理出來供大家參考,希望讓大家少踩坑、快速實(shí)現(xiàn)功能。
原理介紹

我們先搞清楚幾個概念,看Appium是如何實(shí)現(xiàn)自動操作設(shè)備的,結(jié)合圖片從右往左看:
Device是設(shè)備,有安卓、IOS、Windows、Mac等不同類型的設(shè)備。
Appium是一個Web服務(wù)器,與設(shè)備連接,可以通過接口來操作設(shè)備,實(shí)現(xiàn)自動化,本身也是Node應(yīng)用。
Driver是驅(qū)動程序,不同的設(shè)備需要不同的驅(qū)動程序去控制,驅(qū)動程序?qū)儆贏ppium架構(gòu)中的一部分。
Client即調(diào)用Appium接口的客戶端,支持不同語言調(diào)用,比如Java、Node等語言調(diào)用。
總結(jié):用Java、Node.js作為客戶端調(diào)用 Appium服務(wù)端接口,Appium通過驅(qū)動控制設(shè)備,實(shí)現(xiàn)自動化操作。
環(huán)境搭建
不再一一介紹每個依賴的安裝步驟,網(wǎng)上搭建環(huán)境的文章很多,主要是如下兩點(diǎn)功能:
安裝Java、Android的SDK,確保 adb命令可用,用于連接手機(jī)。
安裝Node.js,用于運(yùn)行Appium 和 webdriver.io(Client Node.js)。
adb命令使用
adb 簡介,可以通過數(shù)據(jù)線或WIFI實(shí)現(xiàn)電腦與手機(jī)的連接,手機(jī)需要打開開發(fā)者調(diào)試選項(xiàng),連接成功后,可以通過adb命令操作手機(jī)、安裝、調(diào)試應(yīng)用。
查看設(shè)備列表:adb devices,如果成功連接手機(jī),輸入該命令后會展示設(shè)備列表。

安裝APK:adb install + apk路徑

查看當(dāng)前打開的App包名與appActivity:

?例如微信:com.tencent.mm 是包名,.ui.launcherUI 是 appActivity,這些參數(shù)在后邊開發(fā)自動化功能時使用。
Appium 服務(wù)啟動
有兩種方式啟動服務(wù),一種是安裝命令行工具,通過命令行啟動;第二種是安裝 AppiumDesktop GUI軟件啟動,任選其一即可,作為前端工程師,首選命令行。

坑點(diǎn)1 不同手機(jī)的ADB設(shè)置
Appium啟動后,會在手機(jī)上自動安裝3個App,這里有個坑,不同的手機(jī)系統(tǒng)開發(fā)者選型設(shè)置不同,可能會有不同的問題,親測我的VIVO和OPPO機(jī)型,Vivo必須允許三個App為高耗電后臺運(yùn)行,OPPO開發(fā)者選項(xiàng)中需要需要開啟禁止權(quán)限監(jiān)控,否則無法自動安裝App,其他同事出現(xiàn)了App總是重復(fù)安裝的問題。
Vivo設(shè)置允許APP后臺高耗電:https://blog.csdn.net/a10703060237/article/details/118895357
Oppo開發(fā)者選項(xiàng)設(shè)置:?https://blog.csdn.net/HealerLX/article/details/122997161
小Tips:通過 Appium + 手機(jī)品牌 去搜索問題,更高效。?

?

頁面元素定位工具
appium inspector官方的GUI界面定位工具,可以通過參數(shù)啟動App,并將App的畫面和頁面結(jié)構(gòu)展示出來,以微信為例:填入我們獲取到的appPackage 和 appActivity。?

坑點(diǎn)2 啟動參數(shù)務(wù)必增加 appium:noReset為true
這里有一個坑需要注意,必須設(shè)置appium:noReset參數(shù)為true,不然每次啟動會清空你的App歷史數(shù)據(jù),我的微信數(shù)據(jù)被清理了 ??。

?點(diǎn)擊Start Session按鈕就可以看到頁面的截圖、結(jié)構(gòu)和元素的信息了。?

自動化開發(fā)
如果通過adb連接手機(jī),并通過 appium inspector 成功獲取到界面元素,那么恭喜你已經(jīng)完成了80%的進(jìn)展,剩下的就是通過Node.js + webdriver.io 開發(fā)自動化腳本,App自動跑起來了。
開發(fā)前這里我們要掌握webdriver.io的幾個基本用法:
連接設(shè)備
通過頁面元素選擇器實(shí)現(xiàn)元素的單選、多選。
獲取元素屬性、點(diǎn)擊元素。
滑動頁面
保存圖片
webdriver.io 的選擇器和jquery的語法很類似,看一個Demo相信你就掌握了。
坑點(diǎn)3 滑動操作加時間
webdriver.io的文檔中關(guān)于滑動操作,并沒有提示必須加滑動時間,但實(shí)際開發(fā)中不加滑動時間,在App上會變成點(diǎn)擊 + 滑動操作,經(jīng)常會出現(xiàn)類似長按的操縱,所以務(wù)必加上wait的參數(shù)。
坑點(diǎn)4 鍵盤會被隱藏
unicodeKeyboard設(shè)置為false會將你的手機(jī)輸入法關(guān)掉,重新啟動輸入法應(yīng)用就可以了,還沒研究清楚unicodeKeyboard參數(shù)的意義,大家實(shí)踐后可以補(bǔ)充下。
效果展示
掌握選擇器和操作語法后,前端工程師就能很快的實(shí)現(xiàn)自己的功能了,下邊的截圖是爬取我的微信視頻號中的評論數(shù)據(jù)。?


?

總結(jié)
我們再回顧下:
環(huán)境:安卓JavA、Android的SDK,安裝Node.js 和 Appium命令行。
工具:adb連手機(jī)看參數(shù)、 Appium命令行啟動服務(wù)、appium-inspector查看頁面元素。
流程:使用Node+ webdriverio,實(shí)現(xiàn)操作設(shè)備。
語法:webdriverio 元素選擇、模擬點(diǎn)擊、滑動,獲取元素屬性 + 圖片。
采坑:
不同手機(jī)的開發(fā)者選項(xiàng)設(shè)置。
啟動參數(shù)務(wù)必加noReset。
滑動事件務(wù)必加wait參數(shù)。
鍵盤被隱藏,重新打開輸入法即可。
最后,爬蟲有風(fēng)險,大家不要做違法違規(guī)的事,我是前端工程師秦少衛(wèi),不到之處懇請斧正,歡迎大家點(diǎn)贊關(guān)注評論,我們一起成長。
相關(guān)鏈接:
appium文檔:https://appium.io/docs/en/2.0/cli/args/
webdriver.io文檔:https://webdriver.io/docs/api/
appium-uiautomator2-driver:https://github.com/appium/appium-uiautomator2-driver
appium inspector:https://github.com/appium/appium-inspector