【Android】基于Airtest实现大麦网app自动抢票程序
0x01 緣起
疫情結束的2023年5月,大家對出去玩都有點瘋狂,歌手們也扎堆開演唱會。但演唱會多,票一點也不好搶,搶五月天的門票難度不亞于買五一的高鐵票。所以想嘗試找一些腳本來輔助搶票,之前經常用selenium和request做一些小爬蟲來搞定自動化的工作,所以在 MakiNaruto/Automatic_ticket_purchase 的基礎上改了改,實現搶票功能。但是大麥網實在太狡猾了,改完爬蟲才發現幾乎所有的熱門演唱會只允許在app購買,所以就需要利用APP實現接口自動化。
0x02 Airtest自動化測試
首先想到的是利用對UI的操作實現此功能,目前比較流行的框架是網易的poco和appium,對比了一下發現poco比較簡單好上手,而且也基于python語法,因此筆者選擇了此框架。
運行環境搭建
- Airtest IDE: poco運行基于網易的Airtest IDE,官網下載解包安裝即可
- adb調試: 打開安卓手機的設置中開發者選項的usb調試功能。對于小米和華為手機,還應當允許通過USB安裝應用。
配置好后,點擊connect即可連接到手機
 
操作錄制
我認為Airtest IDE最方便的地方莫過于自動分析apk窗口的控件,并錄制操作,生成代碼。如下圖,點擊poco輔助窗的右上角按鈕,即可開始錄制。
此時點擊設備窗的中對應的控件,即可在左側的代碼窗中自動生成代碼。
生成的代碼示例
# 點擊操作 poco("cn.damai:id/project_poster_mask_iv").click() poco("cn.damai:id/rich_text_tv").click() poco("cn.damai:id/tv_left_main_text").click() poco("cn.damai:id/title_back_btn").click()# 滑動操作 poco("cn.damai:id/rich_text_tv").swipe([-0.0254, -0.3666])除此之外,還可以支持inspector模式。點擊下圖紅色按鈕的部分即可打開inspector,類似chrome瀏覽器控制臺的inspector。然后在設備窗中移動鼠標,并在目標位置點擊右鍵,也可以看到控件的名稱。
inspector模式:
 
另外,還可以在poco輔助窗中點開窗口的樹結構的節點,分析具體的控件名稱和類型
其他控件操作
如下面的代碼等待sku_contanier出現,如果未出現,則證明本頁面非選擇票檔的頁面:
if not poco("cn.damai:id/sku_contanier").wait(timeout=1):logger.debug("未在票檔頁")return False如:
# 遍歷控件,返回第一個的item_text節點 poco("cn.damai:id/project_detail_perform_flowlayout").offspring("cn.damai:id/item_text")# 遍歷子節點,并單擊子節點的checkboxfor viewer_widget in poco("cn.damai:id/recycler_view").offspring("cn.damai:id/recycler_main").child():viewer_widget.offspring("cn.damai:id/checkbox").click()代碼開發
基于上述poco提供的api,即可像搭積木一樣組合出自動化測試工具,實現自動化搶票。
 完整代碼貼在: https://gist.github.com/m2kar/4f4c1cabe047ac77d5ca0a3b35fad4e1
但本方法需要通過adb和App UI交互,調用的框架較重,因此運行起來很慢,實測需要17s,比人慢很多,因此在實際搶票中不是很實用。
因此作者又深入分析了大麥網app的接口實現,后續會寫在了博客的 ”[Android逆向] 某麥網搶票接口分析及搶票工具開發“ 文章中。
參考
更多poco操作可以參考官方文檔: https://airtest.doc.io.netease.com/tutorial/3_Poco_introduction/
歡迎star我的GitHub,博客文章默認在GitHub首發。
本文章原鏈接: https://github.com/m2kar/m2kar.github.io/issues/20
總結
以上是生活随笔為你收集整理的【Android】基于Airtest实现大麦网app自动抢票程序的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: android 模拟器 派派,派派怎么在
- 下一篇: maven离线(offline)构建时无
