這是猿人學讀者的第二篇投稿,讀者是:帥鍋鍋。
最近在做手機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客戶端
再點選start Server
再點選右上角的搜尋框
接著配置4個引數,第一個是手機系統版本,第二個是手機具體型號(在手機設定-關於手機中可以找到),第三、四分別是微信APP的appPackage和appActivity引數,獲取方法如下:
1.首先在Android SDK安裝資料夾下找到aapt.exe工具,並記住該路徑。
2.下載微信app到電腦,儲存位置,開啟命令列,執行如下程式碼:
其中上面是aapt.exe工具所在的位置,紅色遮住的是微信APP所在的位置,回車,在返回結果中尋找
這是微信APP的appPackage引數
這是微信APP的appAcivity資訊。
到此,我們的準備工作就完成了,下面就開始搶紅包操作了。
自動搶紅包流程:
第一步:模擬登入
主要是用appium模擬按鍵操作,步驟是比較好理解,程式碼如下:
其中第一行的desired_caps既是上述的四個引數。
本次採用的是QQ號登陸方式,效果如下:
第二步:迴圈點選第一個聊天視窗所在的座標
一般情況下,最新訊息都是在最上方,所以我們只需迴圈開啟第一個聊天視窗,檢測有無未領取的紅包即可。
需要注意的是,微信訂閱號和一般聊天視窗的返回元素是不同的,要做好區分,本文是識別到微信訂閱號後直接刪除該聊天框。
第三步:判斷當前聯絡人窗內的紅包是否未領取
有時候聊天介面會有好多紅包,有已被自己領取的,有未被自己領取的,我們首先要排除掉已領取的紅包,先來分析一下已領取的紅包:
已領取的紅包多了“已領取”3個字
它的元素為:
所以我們只需要分析一下紅包元素裡是否存在‘com.tencent.mm:id/aul’,就可以判斷該紅包是否已領取,程式碼如下:
若存在,說明紅包已領過,則返回;若不存在,則進入第四步領取紅包。
第四步:領取紅包
因為不能確定每個未被自己領取的紅包是否已被別人領完,所以開啟紅包以後還要檢測一下紅包是否被領完
分兩種情況:
1.紅包未被領完,則點選領取;
2.紅包已被領完,則返回。
點選下面叉號返回:
第五步:整體效果展示
下面給大家演示一下全自動搶紅包的整個流程:
友情提示語:搶紅包雖爽,但也要注意禮尚往來哦!
PS:本文完整程式碼可在微信後臺回覆:qhb 獲得
繼續接受投稿中,好的原創Python文章快發來吧,稿費300-500元/篇。