摘要:首先要打開微信,進(jìn)入到指定的群聊,識別微信紅包執(zhí)行搶紅包的動作。是一款基于控件識別的自動化測試框架,目前支持原生原生微信小程序,也可以在其他引擎中自行接入來使用。
目錄:
0 引言
1 環(huán)境
2 需求分析
3 前置準(zhǔn)備
4 搶紅包流程回顧
5 代碼梳理
6 后記
提到搶紅包,就不得不提Xposed框架,它簡直是個搶紅包的神器,但使用Xposed框架有一個前提條件:手機(jī)需要root,對于蘋果手機(jī)的話就需要越獄了?,F(xiàn)在的手機(jī)想要root或越獄并不容易,同時這會對手機(jī)安全性帶來一些風(fēng)險,搶紅包本身只是個娛樂活動,這樣做就得不償失了。
為了自動搶紅包,python能幫我們實(shí)現(xiàn)嗎?
答案是肯定的,本文就帶大家一起探索下用Python如何實(shí)現(xiàn)自動搶紅包。
1 環(huán)境操作系統(tǒng):Windows
Python版本:3.7.2
手機(jī)系統(tǒng):Android
2 需求分析這里我們的需求是實(shí)現(xiàn)自動搶紅包。首先要打開微信,進(jìn)入到指定的群聊,識別微信紅包、執(zhí)行搶紅包的動作。這就是關(guān)鍵的步驟,簡單清晰。
因為電腦版本的微信沒有搶紅包的功能,我們只能手機(jī)微信,那么就需要把手機(jī)連上電腦,通過電腦控制手機(jī)來自動搶,那就需要確?!竌db」命令可正常執(zhí)行。
識別微信中的消息,是紅包還是普通的信息,這里我們通過聊天消息的元素標(biāo)識來判斷。這里我們借助了「Airtest IDE」工具來實(shí)現(xiàn)。
3 前置準(zhǔn)備 3.1 打開手機(jī)的USB調(diào)試要正常使用「adb」需要打開USB調(diào)試,設(shè)置項通常出現(xiàn)在手機(jī)系統(tǒng)設(shè)置中的[開發(fā)人員選項]里面。
在手機(jī)上打開USB調(diào)試后,接下來我們通過Airttest IDE驗證 adb 運(yùn)行是否正常。
3.2 下載安裝Airtest IDE開始之前先,先解釋下airttest相關(guān)概念:
Airtest 是一個跨平臺的、基于圖像識別的UI自動化測試框架,適用于游戲和App,支持平臺有Windows、Android和iOS。
Poco是一款基于UI控件識別的自動化測試框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk來使用。
AirtestIDE 是一個我們配套推出的跨平臺的UI自動化測試編輯器,內(nèi)置了Airtest和Poco的相關(guān)插件功能,能夠使用它快速簡單地編寫腳本。
Airtest IDE 的下載地址:http://airtest.netease.com/
下載之后,解壓打開就可以使用,Airtest IDE的界面如下:
使用AirtestIDE對Android應(yīng)用進(jìn)行自動化操作,第一步就需要連接Android設(shè)備。
請使用USB線連接手機(jī),手機(jī)上出現(xiàn)的 允許USB調(diào)試 彈窗,點(diǎn)擊 確定。
點(diǎn)擊連接面板中的 refresh ADB 按鈕,設(shè)備列表將會刷新。
點(diǎn)擊列表內(nèi)對應(yīng)設(shè)備的 Connect 完成連接。
若設(shè)備未刷出,點(diǎn)擊 refresh ADB 按鈕。
若連接遇到問題,請參考Airtest的官方教程:Android真機(jī)連接
4 搶紅包流程回顧打開微信,在最左側(cè)的Tab頁,微信消息列表,我們需要從這里選擇指定的群聊來搶紅包。
在AirtestIDE中,我們可以通過暫停功能,凍結(jié)當(dāng)前的UI樹形結(jié)構(gòu)來精確地檢視UI控件,我們先來分析下這個頁面中元素標(biāo)識。
▲聊天頁面中整體的群聊消息的元素標(biāo)識 com.tencent.mm:id/d1v
▲聊天頁面中單個群聊消息的元素標(biāo)識 com.tencent.mm:id/b6e
接下來進(jìn)入我們準(zhǔn)備要搶紅包的群聊中,識別出紅包并執(zhí)行搶紅包的動作。
我們先來看看紅包的標(biāo)識:
▲紅包標(biāo)識的示例1 com.tencent.mm:id/aql
▲紅包標(biāo)識的示例2 com.tencent.mm:id/aql
點(diǎn)擊紅包,記錄下彈出的大紅包頁面中“開”的元素標(biāo)識
▲大紅包頁面中”開“的標(biāo)識 com.tencent.mm:id/d02
這里我們需要判斷是紅包是否有效,比如已被領(lǐng)完或是已被自己領(lǐng)取的紅包就是無效的,我們在執(zhí)行時可以跳過這些。
▲已領(lǐng)取紅包的標(biāo)識 com.tencent.mm:id/apk
▲已被領(lǐng)完紅包的標(biāo)識 com.tencent.mm:id/apk
我們用的各元素的標(biāo)識都已取到,接下來就是組織我們的代碼。
5 代碼梳理首先得打開微信,利用Airtest啟動app應(yīng)用,只須一行代碼即可搞定,如下
# 打開手機(jī)微信 poco(text="微信").click()
獲取當(dāng)前頁面中所有所有群聊的名稱
# 群聊消息的元素標(biāo)識 Chat_msg = poco(name="com.tencent.mm:id/d1v").offspring("com.tencent.mm:id/b6e") # 獲取當(dāng)前頁面中所有群聊的名稱 Chat_names = [] Chat_names = list(map(lambda x: x.get_text(), Chat_msg))
選擇并進(jìn)入指定的群聊
# 指定搶紅包的群聊名稱 chat = input("請指定群聊名稱:") if chat in Chat_names: index = Chat_names.index(chat) # 點(diǎn)擊進(jìn)入指定的群聊 Chat_msg[index].click() 在微信聊天頁面中,獲取當(dāng)前頁面中的所有消息元素。 msg_list = poco("android.widget.ListView").children()
遍歷消息并查找紅包
for msg in msg_list: # 微信紅包的標(biāo)識 LuckyMoney = msg.offspring("com.tencent.mm:id/aql") # 已失效紅包(比如已領(lǐng)取、已被領(lǐng)完)的標(biāo)識 Invalid = msg.offspring("com.tencent.mm:id/aqk") # 判斷紅包是否有效并搶起來! if LuckyMoney: pass
在LuckyMoney中定義搶紅包的動作
if Invalid.exists() and (Invalid.get_text()=="已領(lǐng)取" or Invalid.get_text()=="已被領(lǐng)完"): print(f"紅包已無效,跳過……") continue else: print(f"發(fā)現(xiàn)一個新紅包,搶起來!") poco("com.tencent.mm:id/d1v") msg.click() click_open = poco("com.tencent.mm:id/d02") if click_open.exists(): click_open.click() keyevent("BACK")6 后記
若我們在一臺電腦上并不想安裝Airtest IDE,還能執(zhí)行這個腳本嗎?
當(dāng)然可以,只需要安裝好「pocoui」這個第三方庫就可以“拋棄”它了!
pip install pocoui
利用 AirtestIDE 創(chuàng)建一個項目時,設(shè)備類型選中 Android,就會在編碼區(qū)生成一段初始化的代碼。
from airtest.core.api import * auto_setup(__file__) from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
我們自己編寫的Python代碼中也需要加上這段初始化的代碼。
再次強(qiáng)調(diào),在執(zhí)行腳本時要確保手機(jī)連上電腦,并確?!竌db」命令正常運(yùn)行。
對Airtest有興趣的小伙伴,可以參考airtest官方教程:AirtestIDE官方文檔
關(guān)注公眾號「Python專欄」,后臺回復(fù):python搶紅包,獲取本文所涉及的完整代碼
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/43995.html
摘要:先來看下效果實(shí)際使用不需要打開手機(jī),此處為演示需要實(shí)現(xiàn)代碼主要有兩個部分接收紅包消息直接從手機(jī)端微信獲取數(shù)據(jù)比較麻煩,主流的方法都是通過微信網(wǎng)頁版來獲取。這里我用的是,通過即可安裝,之前我也寫過文章介紹微信機(jī)器人進(jìn)化指南。 又到了辭舊迎新的時候,群里的紅包也多起來了。然而大佬們總是喜歡趁我不在的時候發(fā)紅包,經(jīng)常打開手機(jī),發(fā)現(xiàn)紅包已被搶完,感覺錯過了一個億。 安卓上有不少紅包助手工具,但...
摘要:目錄引言環(huán)境需求分析前置準(zhǔn)備逛店鋪流程回顧代碼全景展示總結(jié)引言最近疊貓貓的活動可真是十分的火爆,每天小伙伴們?yōu)榱撕县堌埫Φ目芍^是如火如荼。為啥要疊貓貓呢賺貓幣得現(xiàn)金紅包眼看為實(shí),先來看看我朋友的購物訂單。 目錄:0 引言1 環(huán)境2 需求分析3 前置準(zhǔn)備4 逛店鋪流程回顧5 代碼全景展示6 總結(jié) 0 引言 最近疊貓貓的活動可真是十分的火爆,每天小伙伴們?yōu)榱撕县堌埫Φ目芍^是如火如荼。為啥要...
摘要:活動規(guī)模既然公司對自如客這么闊,那對我們員工也得夠意思,所以年底我們共準(zhǔn)備了個活動。拆分后,紅包占有只需操作,響應(yīng)性能已不是問題。 首發(fā)于 樊浩柏科學(xué)院 2017 年是自如快速增長的一年,自如客突破 100 萬,管理資產(chǎn)達(dá)到 50 萬間,在年底成功獲得了 40 億 A 輪融資,而這些都要感謝廣大的自如客,公司為了回饋?zhàn)匀缈停诹苣昊顒訒r就發(fā)放了 6000 萬租住基金,當(dāng)然年底散幣活...
閱讀 2586·2021-08-20 09:38
閱讀 1364·2019-08-30 15:43
閱讀 602·2019-08-29 17:13
閱讀 1613·2019-08-29 14:01
閱讀 1321·2019-08-29 13:29
閱讀 2342·2019-08-23 18:29
閱讀 2055·2019-08-23 17:51
閱讀 1922·2019-08-23 17:16