日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android】基于Airtest实现大麦网app自动抢票程序

發布時間:2024/1/8 Android 154 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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輔助窗中點開窗口的樹結構的節點,分析具體的控件名稱和類型

其他控件操作

  • 等待控件出現。wait(timeout=1),如果控件在timeout時間內出現,則返回控件,否則返回None
  • 如下面的代碼等待sku_contanier出現,如果未出現,則證明本頁面非選擇票檔的頁面:

    if not poco("cn.damai:id/sku_contanier").wait(timeout=1):logger.debug("未在票檔頁")return False
  • 獲取子控件。offspring()用于獲取某控件所有的子孫節點的控件。.child()獲取下級節點。
  • 如:

    # 遍歷控件,返回第一個的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()
  • 獲取屬性。get_text()用于獲取文字內容,attr()可獲取其他屬性。
  • #獲取tv_tag的文字 tag_str=tv_tag.get_text() # 判斷復選框是否已被選中 viewer_widget.offspring("cn.damai:id/checkbox").attr("checked")
  • 點擊。 click()
  • 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自动抢票程序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。