
來源:AirPython
作者:星安果
大家好,我是安果!
最近,阿里內(nèi)部開源了一個(gè) iOS 端由 Python 編寫的自動(dòng)化工具,即:tidevice
它是一款跨平臺的自動(dòng)化開源工具,不依賴 Xcode 就可以啟動(dòng) WebDriverAgent( WDA ),這也就意味著 Windows 可以直接運(yùn)行 iOS 自動(dòng)化腳本
進(jìn)入到虛擬環(huán)境,先安裝 tidevice 的依賴包
# 安裝依賴包
pip3 install -U "tidevice[openssl]"
# 查看tidevice版本,檢查是否安裝成功
tidevice version
將 iPhone 設(shè)備連接到電腦上,就可以使用 tidevice 提供的功能了
3-1.查看設(shè)備列表
# 二選一
tidevice list
# json數(shù)據(jù)顯示
tidevice list --json
3-2.安裝、卸載應(yīng)用
安裝對應(yīng)的關(guān)鍵字為:「 install 」
tidevice 同時(shí)支持安裝本地 ipa 包和遠(yuǎn)鏈下的 ipa 應(yīng)用包
另外,tidevice 可以使用「 --udid 」參數(shù)將應(yīng)用安裝到某一臺設(shè)備中
# 安裝本地應(yīng)用
tidevice install example.ipa
# 根據(jù)udid參數(shù),指定設(shè)備安裝應(yīng)用
tidevice --udid $UDID install
https://example.org/example.ipa
tidevice install https://.....ipa
卸載對應(yīng)的關(guān)鍵字為:「 uninstall 」
通過應(yīng)用包名可以卸載設(shè)備上的某一個(gè)應(yīng)用
# 卸載應(yīng)用(通過包名)
# 比如:知識星球App包名為:com.unnoo.quan
tidevice uninstall com.unnoo.quan
3-3.啟動(dòng)、關(guān)閉應(yīng)用
啟動(dòng)應(yīng)用對應(yīng)的關(guān)鍵字為:「 launch 」
關(guān)閉應(yīng)用對應(yīng)的關(guān)鍵字為:「 kill 」
# 打開應(yīng)用
tidevice launch com.unnoo.quan
# 停止殺死應(yīng)用
tidevice kill com.unnoo.quan
3-4.已安裝應(yīng)用及名稱、版本
使用「 tidevice applist 」命令,可以查看設(shè)備上已經(jīng)安裝的應(yīng)用、應(yīng)用名稱、應(yīng)用版本號
# 查看設(shè)備應(yīng)用信息列表
localhost:tidevice_demo xingag$ tidevice applist
com.tencent.xin WeChat 8.0.2
com.ss.iphone.ugc.Aweme 抖音 13.4.0
com.tencent.mttlite QQ瀏覽器 10.8.3
com.panasonic.jp.imageapp Image App 1.10.17
com.unnoo.quan 知識星球 4.20.2
co.visualsupply.cam VSCO 189
com.ucweb.iphone.lowversion UC瀏覽器 13.1.5
com.niksoftware.snapseedforipad Snapseed 2.19.5
com.autonavi.amap 高德地圖 10.76.0
com.lagou.education 拉勾教育 1.4.9
com.xunmeng.pinduoduo 拼多多 5.37.0
com.tencent.QQMusic QQ音樂 10.5.5
io.ideamp.feelcab Feelca B 1.6.0
com.chinaunicom.mobilebusiness 手機(jī)營業(yè)廳 8.00.01
com.feiyu-tech.vico Vicool 1.2.26
com.ss.iphone.article.News 今日頭條 7.9.3
com.sogou.sogouinput 搜狗輸入法 10.18.1
org.geekbang.GeekTime 極客時(shí)間 2.9.2
com.burbn.hyperlapse Hyperlapse 1.3.4
com.apple.itunesu iTunes U 3.8
3-5.設(shè)備信息
利用「 tidevice info 」可以查看設(shè)備信息,比如:設(shè)備序列號、系統(tǒng)版本、CPU、本機(jī)號碼、時(shí)間戳、藍(lán)牙地址、MAC 地址等信息
# 查看設(shè)備信息
localhost:~ xingag$ tidevice info
MarketName: iPhone SE (1st generation)
DeviceName: xingag
ProductVersion: 14.4
ProductType: iPhone8,4
ModelNumber: MP892
SerialNumber: ...
CPUArchitecture: arm64
ProductName: iPhone OS
ProtocolVersion: 2
RegionInfo: ZP/A
TimeIntervalSince1970: 1616979424.235399
TimeZone: Asia/Shanghai
WiFiAddress: 58:e2:8f:68:4c:b0
BluetoothAddress: 58:e2:8f:68:4c:b1
BasebandVersion: 10.40.01
...
如果要查看設(shè)備的電池信息,可以使用關(guān)鍵字 「 --domain + 應(yīng)用包名 」來獲取
# 查看設(shè)備電池信息
localhost:~ xingag$ tidevice info --domain com.apple.mobile.battery --json
{
"BatteryCurrentCapacity": 54,
"BatteryIsCharging": true,
"ExternalChargeCapable": true,
"ExternalConnected": true,
"FullyCharged": false,
"GasGaugeCapability": true,
"HasBattery": true
}
3-6.重啟及截圖
重啟對應(yīng)的關(guān)鍵字為:「 reboot 」
截圖對應(yīng)的關(guān)鍵字為:「 screenshot 」
# 重啟設(shè)備
tidevice reboot
# 截圖并保存到文件 screenshot.jpg 中
tidevice screenshot screenshot.jpg
3-7.系統(tǒng)日志及更多幫助
查看系統(tǒng)日志的命令為:「 tidevice syslog 」,當(dāng)然也可以配置 grep 參數(shù)進(jìn)行過濾
# 查看系統(tǒng)日志
tidevice syslog
# 更多幫助
tidevice -h
要完成 iOS 端的自動(dòng)化,我們還需要做一些準(zhǔn)備工作
4-1.安裝 WDA
我們需要將 WebDriverAgent 安裝到 iOS 設(shè)備上,通過它驅(qū)動(dòng)手機(jī)進(jìn)行一系列自動(dòng)化操作
PS:由于 Facebook WDA 很長時(shí)間沒有更新了,這里建議直接使用 Appium WDA
https://github.com/appium/WebDriverAgent
下載項(xiàng)目后,使用 Xcode 打開,Scheme 選擇 WebDriverAgentRunner,設(shè)備選擇真機(jī)
然后配置開發(fā)者證書,可以參考下面鏈接進(jìn)行配置
https://testerhome.com/topics/7220
最后,Xcode 選擇 Project 下的 Test 將項(xiàng)目運(yùn)行到真機(jī)設(shè)備上
注意:第一次運(yùn)行 WDA 可能運(yùn)行失敗,需要手動(dòng)在設(shè)置中對證書添加信任
4-2.運(yùn)行 WDA
真機(jī)設(shè)備安裝完 WDA 后,就可以脫離 Mac,使用 Windows 進(jìn)行自動(dòng)化操作了
使用「 tidevice wdaproxy 」命令可以運(yùn)行 WDA 和端口轉(zhuǎn)發(fā)
# 運(yùn)行 WDA
# 端口轉(zhuǎn)發(fā)到8100
# 應(yīng)用包名:
com.facebook.WebDriverAgentRunner.xingag23.xctrunner
idevice wdaproxy -B
com.facebook.WebDriverAgentRunner.xingag23.xctrunner --port 8100
PS:由于 Xcode 設(shè)置證書的時(shí)候,更改過 bundle_id,所以這里的包名是一個(gè)變量
4-3.編寫自動(dòng)化腳本
接下來,就可以使用 Appium 或 facebook-wda 編寫腳本并運(yùn)行到 iOS 設(shè)備上了
以 facebook-wda 為例
首先,我們安裝對應(yīng)的依賴
# 安裝facebook-wda依賴
pip3 install -U facebook-wda
接著,編寫自動(dòng)化腳本并運(yùn)行測試
import wda
import time
# 連接設(shè)備
c1 = wda.USBClient()
# c1 = wda.Client("http://10.3.209.175:8100")
print(c.info)
# 極客時(shí)間
bundle_id = 'org.geekbang.GeekTime'
# 通過app的bundleId啟動(dòng)App
s = c1.session(bundle_id)
# 休眠5s
s.sleep(5)
# 截圖保存到本地
c1.screenshot('sc.png')
# 回到桌面
s.home()
阿里這款 iOS 端自動(dòng)化工具的主要優(yōu)點(diǎn)是啟動(dòng)速度快,內(nèi)存占用低;更重要的是,它是跨平臺,穩(wěn)定性相對較高
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10