最近在做手機app自動化測試,想用python寫個自動搶微信紅包的程式,先在網上查了一下,發現搶紅包教程要麼是用itchat模組做到紅包提醒功能,要麼root手機後用Xposed框架,這兩種方式都不是我想要的結果。於是我決定用appium模組實現此功能,最後發現僅用了80行程式碼,整個過程只涉及到元素檢測和模擬點選操作,非常簡單易懂,下面給大家詳細介紹一下我是如何實現的。
整體思路:
開啟第一個聊天視窗,檢測有無未領取的紅包,若無,則直接返回;
若有,先檢測是否被領完,若未領完則開啟該紅包,若領完則返回。
通過設定適當時間間隔,就可以一直檢測最新訊息中有無紅包。
環境配置:
首先需要安裝appium並配置相關環境。主要方法是:
先在官網下載安裝appium,然後安裝Android SDK,但是直接安裝的話會有各種bug,很不方便,我的方法是先安裝Android Studio,在它裡面可以安裝Android SDK,最後再安裝JAVA,並配置JAVA_HOME和CLASSPATH兩個引數的環境變數,這套流程下來以後就可以使用appium了。
appium使用簡介
appium是一個開源、跨平臺的測試框架,可以用來測試原生及混合的移動端應用,支援IOS、Android及FirefoxOS平臺。作為自動化測試工具,主要是先定位app介面的元素,再通過模擬點選、滑動等動作來操控手機,從而達到自動化測試的效果。
Python呼叫appium模組前,要先開啟appium客戶端
接著配置4個引數,第一個是手機系統版本,第二個是手機具體型號(在手機設定-關於手機中可以找到),第三、四分別是微信APP的appPackage和appActivity引數,獲取方法如下:
1.首先在Android SDK安裝資料夾下找到aapt.exe工具,並記住該路徑。
到此,我們的準備工作就完成了,下面就開始搶紅包操作了。
自動搶紅包流程:
第一步:模擬登入
主要是用appium模擬按鍵操作,步驟是比較好理解,程式碼如下:
其中第一行的desired_caps既是上述的四個引數。
一般情況下,最新訊息都是在最上方,所以我們只需迴圈開啟第一個聊天視窗,檢測有無未領取的紅包即可。
第三步:判斷當前聯絡人窗內的紅包是否未領取
有時候聊天介面會有好多紅包,有已被自己領取的,有未被自己領取的,我們首先要排除掉已領取的紅包,先來分析一下已領取的紅包:
已領取的紅包多了“已領取”3個字
它的元素為:
所以我們只需要分析一下紅包元素裡是否存在‘com.tencent.mm:id/aul’,就可以判斷該紅包是否已領取,程式碼如下:
若存在,說明紅包已領過,則返回;若不存在,則進入第四步領取紅包。
第四步:領取紅包
因為不能確定每個未被自己領取的紅包是否已被別人領完,所以開啟紅包以後還要檢測一下紅包是否被領完
分兩種情況:
2.紅包已被領完,則返回。
第五步:整體效果展示
下面給大家演示一下全自動搶紅包的整個流程: