雖說不能見到財神本尊,但是家人群里長輩們的紅包,公司群你老闆的紅包,同學群裡大佬的紅包,是不是總是手慢無?引言
提到搶紅包,就不得不提Xposed框架,它簡直是個搶紅包的神器,但使用Xposed框架有一個前提條件:手機需要root,對於蘋果手機的話就需要越獄了。現在的手機想要root或越獄並不容易,同時這會對手機安全性帶來一些風險,搶紅包本身只是個娛樂活動,這樣做就得不償失了。
自動搶紅包,python能幫我們實現嗎?
答案是肯定的,本文就帶大家一起探索下用Python如何實現自動搶紅包。
環境作業系統:Windows
Python版本:3.7.2
手機系統:Android
需求分析
前置準備開啟手機的USB除錯要正常使用「adb」需要開啟USB除錯,設定項通常出現在手機系統設定中的[開發人員選項]裡面。
在手機上開啟USB除錯後,接下來我們通過Airttest IDE驗證 adb 執行是否正常。
下載安裝Airtest IDE開始之前先,先解釋下airttest相關概念:
Airtest 是一個跨平臺的、基於影象識別的UI自動化測試框架,適用於遊戲和App,支援平臺有Windows、Android和iOS。Poco是一款基於UI控制元件識別的自動化測試框架,目前支援Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程式,也可以在其他引擎中自行接入poco-sdk來使用。AirtestIDE 是一個我們配套推出的跨平臺的UI自動化測試編輯器,內建了Airtest和Poco的相關外掛功能,能夠使用它快速簡單地編寫指令碼。Airtest IDE 的下載地址:
http://airtest.netease.com/
下載之後,解壓開啟就可以使用,Airtest IDE的介面如下:
使用AirtestIDE對Android應用進行自動化操作,第一步就需要連線Android裝置。
請使用USB線連線手機,手機上出現的 允許USB除錯 彈窗,點選 確定。點選連接面板中的 refresh ADB 按鈕,裝置列表將會重新整理。點選列表內對應裝置的 Connect 完成連線。若裝置未刷出,點選 refresh ADB 按鈕。若連線遇到問題,請參考Airtest的官方教程:Android真機連線。
在AirtestIDE中,我們可以通過暫停功能,凍結當前的UI樹形結構來精確地檢視UI控制元件,我們先來分析下這個頁面中元素標識。
聊天頁面中整體的群聊訊息的元素標識 com.tencent.mm:id/d1v
聊天頁面中單個群聊訊息的元素標識 com.tencent.mm:id/b6e
接下來進入我們準備要搶紅包的群聊中,識別出紅包並執行搶紅包的動作。
我們先來看看紅包的標識:
紅包標識的示例1 com.tencent.mm:id/aql
紅包標識的示例2 com.tencent.mm:id/aql
大紅包頁面中”開“的標識 com.tencent.mm:id/d02
這裡我們需要判斷是紅包是否有效,比如已被領完或是已被自己領取的紅包就是無效的,我們在執行時可以跳過這些。
已領取紅包的標識 com.tencent.mm:id/apk
已被領完紅包的標識 com.tencent.mm:id/apk
我們用的各元素的標識都已取到,接下來就是組織我們的程式碼。
程式碼梳理
# 開啟手機微信poco(text='微信').click()
獲取當前頁面中所有所有群聊的名稱
# 群聊訊息的元素標識Chat_msg= poco(name='com.tencent.mm:id/d1v').offspring('com.tencent.mm:id/b6e')# 獲取當前頁面中所有群聊的名稱Chat_names= []Chat_names= list(map(lambda x: x.get_text(), Chat_msg))
選擇並進入指定的群聊
# 指定搶紅包的群聊名稱chat =input('請指定群聊名稱:')ifchat in Chat_names:index= Chat_names.index(chat)# 點選進入指定的群聊Chat_msg[index].click()
msg_list= poco("android.widget.ListView").children()
遍歷訊息並查詢紅包
formsginmsg_list:# 微信紅包的標識LuckyMoney = msg.offspring('com.tencent.mm:id/aql')# 已失效紅包(比如已領取、已被領完)的標識Invalid = msg.offspring('com.tencent.mm:id/aqk')# 判斷紅包是否有效並搶起來!ifLuckyMoney:pass
在LuckyMoney中定義搶紅包的動作
formsginmsg_list:# 微信紅包的標識LuckyMoney = msg.offspring('com.tencent.mm:id/aql')# 已失效紅包(比如已領取、已被領完)的標識Invalid = msg.offspring('com.tencent.mm:id/aqk')# 判斷紅包是否有效並搶起來!ifLuckyMoney:pass
後記
若我們在一臺電腦上並不想安裝Airtest IDE,還能執行這個指令碼嗎?
當然可以,只需要安裝好「pocoui」這個第三方庫就可以“拋棄”它了!
pipinstallpocoui
利用 AirtestIDE 建立一個專案時,裝置型別選中 Android,就會在編碼區生成一段初始化的程式碼。
fromairtest.core.apiimport*auto_setup(__file__)frompoco.drivers.android.uiautomationimportAndroidUiautomationPocopoco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
我們自己編寫的Python程式碼中也需要加上這段初始化的程式碼。
再次強調,在執行指令碼時要確保手機連上電腦,並確保「adb」命令正常執行。
對Airtest有興趣的小夥伴,可以參考airtest官方教程:AirtestIDE官方文件