Python自動(dòng)搶紅包教程詳解
0 引言
提到搶紅包,就不得不提Xposed框架,它簡(jiǎn)直是個(gè)搶紅包的神器,但使用Xposed框架有一個(gè)前提條件:手機(jī)需要root,對(duì)于蘋果手機(jī)的話就需要越獄了?,F(xiàn)在的手機(jī)想要root或越獄并不容易,同時(shí)這會(huì)對(duì)手機(jī)安全性帶來一些風(fēng)險(xiǎn),搶紅包本身只是個(gè)娛樂活動(dòng),這樣做就得不償失了。
為了自動(dòng)搶紅包,python能幫我們實(shí)現(xiàn)嗎?
答案是肯定的,本文就帶大家一起探索下用Python如何實(shí)現(xiàn)自動(dòng)搶紅包。
1 環(huán)境
操作系統(tǒng):Windows
Python版本:3.7.2
手機(jī)系統(tǒng):Android
2 需求分析
這里我們的需求是實(shí)現(xiàn)自動(dòng)搶紅包。首先要打開微信,進(jìn)入到指定的群聊,識(shí)別微信紅包、執(zhí)行搶紅包的動(dòng)作。這就是關(guān)鍵的步驟,簡(jiǎn)單清晰。
因?yàn)殡娔X版本的微信沒有搶紅包的功能,我們只能手機(jī)微信,那么就需要把手機(jī)連上電腦,通過電腦控制手機(jī)來自動(dòng)搶,那就需要確保「adb」命令可正常執(zhí)行。
識(shí)別微信中的消息,是紅包還是普通的信息,這里我們通過聊天消息的元素標(biāo)識(shí)來判斷。這里我們借助了「Airtest IDE」工具來實(shí)現(xiàn)。
3 前置準(zhǔn)備
3.1 打開手機(jī)的USB調(diào)試
要正常使用「adb」需要打開USB調(diào)試,設(shè)置項(xiàng)通常出現(xiàn)在手機(jī)系統(tǒng)設(shè)置中的[開發(fā)人員選項(xiàng)]里面。
在手機(jī)上打開USB調(diào)試后,接下來我們通過Airttest IDE驗(yàn)證 adb 運(yùn)行是否正常。
3.2 下載安裝Airtest IDE
開始之前先,先解釋下airttest相關(guān)概念:
Airtest 是一個(gè)跨平臺(tái)的、基于圖像識(shí)別的UI自動(dòng)化測(cè)試框架,適用于游戲和App,支持平臺(tái)有Windows、Android和iOS。
Poco是一款基于UI控件識(shí)別的自動(dòng)化測(cè)試框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk來使用。
AirtestIDE 是一個(gè)我們配套推出的跨平臺(tái)的UI自動(dòng)化測(cè)試編輯器,內(nèi)置了Airtest和Poco的相關(guān)插件功能,能夠使用它快速簡(jiǎn)單地編寫腳本。
Airtest IDE 的下載地址:http://airtest.netease.com/
下載之后,解壓打開就可以使用,Airtest IDE的界面如下:
使用AirtestIDE對(duì)Android應(yīng)用進(jìn)行自動(dòng)化操作,第一步就需要連接Android設(shè)備。
請(qǐng)使用USB線連接手機(jī),手機(jī)上出現(xiàn)的 允許USB調(diào)試 彈窗,點(diǎn)擊 確定。
- 點(diǎn)擊連接面板中的 refresh ADB 按鈕,設(shè)備列表將會(huì)刷新。
- 點(diǎn)擊列表內(nèi)對(duì)應(yīng)設(shè)備的 Connect 完成連接。
- 若設(shè)備未刷出,點(diǎn)擊 refresh ADB 按鈕。
若連接遇到問題,請(qǐng)參考Airtest的官方教程:Android真機(jī)連接
4 搶紅包流程回顧
打開微信,在最左側(cè)的Tab頁(yè),微信消息列表,我們需要從這里選擇指定的群聊來?yè)尲t包。
在AirtestIDE中,我們可以通過暫停功能,凍結(jié)當(dāng)前的UI樹形結(jié)構(gòu)來精確地檢視UI控件,我們先來分析下這個(gè)頁(yè)面中元素標(biāo)識(shí)。
▲聊天頁(yè)面中整體的群聊消息的元素標(biāo)識(shí) com.tencent.mm:id/d1v
▲聊天頁(yè)面中單個(gè)群聊消息的元素標(biāo)識(shí) com.tencent.mm:id/b6e
接下來進(jìn)入我們準(zhǔn)備要搶紅包的群聊中,識(shí)別出紅包并執(zhí)行搶紅包的動(dòng)作。
我們先來看看紅包的標(biāo)識(shí):
▲紅包標(biāo)識(shí)的示例1 com.tencent.mm:id/aql
▲紅包標(biāo)識(shí)的示例2 com.tencent.mm:id/aql
點(diǎn)擊紅包,記錄下彈出的大紅包頁(yè)面中“開”的元素標(biāo)識(shí)
▲大紅包頁(yè)面中”開“的標(biāo)識(shí) com.tencent.mm:id/d02
這里我們需要判斷是紅包是否有效,比如已被領(lǐng)完或是已被自己領(lǐng)取的紅包就是無效的,我們?cè)趫?zhí)行時(shí)可以跳過這些。
▲已領(lǐng)取紅包的標(biāo)識(shí) com.tencent.mm:id/apk
▲已被領(lǐng)完紅包的標(biāo)識(shí) com.tencent.mm:id/apk
我們用的各元素的標(biāo)識(shí)都已取到,接下來就是組織我們的代碼。
5 代碼梳理
首先得打開微信,利用Airtest啟動(dòng)app應(yīng)用,只須一行代碼即可搞定,如下
# 打開手機(jī)微信 poco(text='微信').click()
獲取當(dāng)前頁(yè)面中所有所有群聊的名稱
# 群聊消息的元素標(biāo)識(shí) Chat_msg = poco(name='com.tencent.mm:id/d1v').offspring('com.tencent.mm:id/b6e') # 獲取當(dāng)前頁(yè)面中所有群聊的名稱 Chat_names = [] Chat_names = list(map(lambda x: x.get_text(), Chat_msg))
選擇并進(jìn)入指定的群聊
# 指定搶紅包的群聊名稱 chat = input('請(qǐng)指定群聊名稱:') if chat in Chat_names: index = Chat_names.index(chat) # 點(diǎn)擊進(jìn)入指定的群聊 Chat_msg[index].click() 在微信聊天頁(yè)面中,獲取當(dāng)前頁(yè)面中的所有消息元素。 msg_list = poco("android.widget.ListView").children()
遍歷消息并查找紅包
for msg in msg_list: # 微信紅包的標(biāo)識(shí) LuckyMoney = msg.offspring('com.tencent.mm:id/aql') # 已失效紅包(比如已領(lǐng)取、已被領(lǐng)完)的標(biāo)識(shí) Invalid = msg.offspring('com.tencent.mm:id/aqk') # 判斷紅包是否有效并搶起來! if LuckyMoney: pass
在LuckyMoney中定義搶紅包的動(dòng)作
if Invalid.exists() and (Invalid.get_text()=='已領(lǐng)取' or Invalid.get_text()=='已被領(lǐng)完'): print(f'紅包已無效,跳過……') continue else: print(f'發(fā)現(xiàn)一個(gè)新紅包,搶起來!') 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 后記
若我們?cè)谝慌_(tái)電腦上并不想安裝Airtest IDE,還能執(zhí)行這個(gè)腳本嗎?
當(dāng)然可以,只需要安裝好「pocoui」這個(gè)第三方庫(kù)就可以“拋棄”它了!
pip install pocoui
利用 AirtestIDE 創(chuàng)建一個(gè)項(xiàng)目時(shí),設(shè)備類型選中 Android,就會(huì)在編碼區(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í)行腳本時(shí)要確保手機(jī)連上電腦,并確保「adb」命令正常運(yùn)行。
- 基于python實(shí)現(xiàn)微信收紅包自動(dòng)化測(cè)試腳本(測(cè)試用例)
- Python+Appium實(shí)現(xiàn)自動(dòng)搶微信紅包
- 用60行代碼實(shí)現(xiàn)Python自動(dòng)搶微信紅包
- python生成隨機(jī)紅包的實(shí)例寫法
- Python實(shí)現(xiàn)的微信紅包提醒功能示例
- python 實(shí)現(xiàn)紅包隨機(jī)生成算法的簡(jiǎn)單實(shí)例
- python實(shí)現(xiàn)紅包裂變算法
- Python版微信紅包分配算法
- Java 入門圖形用戶界面設(shè)計(jì)之列表框JList
相關(guān)文章
Python3爬蟲ChromeDriver的安裝實(shí)例
在本篇文章里小編給大家整理的是一篇關(guān)于Python3爬蟲ChromeDriver的安裝實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-02-02Python GUI庫(kù)PyQt5樣式QSS子控件介紹
這篇文章主要介紹了Python GUI庫(kù)PyQt5樣式QSS子控件介紹,需要的朋友可以參考下2020-02-02Python簡(jiǎn)單爬蟲導(dǎo)出CSV文件的實(shí)例講解
今天小編就為大家分享一篇Python簡(jiǎn)單爬蟲導(dǎo)出CSV文件的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07Python中用pyinstaller打包時(shí)的圖標(biāo)問題及解決方法
這篇文章主要介紹了python中用pyinstaller打包時(shí)的圖標(biāo)問題及解決方法,本文從兩方面給大家分析原因所在,通過截圖實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-02-02輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI
這篇文章主要教大家如何輕松實(shí)現(xiàn)TensorFlow微信跳一跳的AI,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01python實(shí)現(xiàn)測(cè)試工具(一)——命令行發(fā)送get請(qǐng)求
這篇文章主要介紹了python如何實(shí)現(xiàn)命令行發(fā)送get請(qǐng)求,幫助大家更好的利用python進(jìn)行測(cè)試工作,感興趣的朋友可以了解下2020-10-10Python Sleep休眠函數(shù)使用簡(jiǎn)單實(shí)例
這篇文章主要介紹了Python Sleep休眠函數(shù)使用簡(jiǎn)單實(shí)例,本文直接給出兩個(gè)實(shí)現(xiàn)例子,需要的朋友可以參考下2015-02-02Python cookbook(字符串與文本)針對(duì)任意多的分隔符拆分字符串操作示例
這篇文章主要介紹了Python cookbook(字符串與文本)針對(duì)任意多的分隔符拆分字符串操作,結(jié)合實(shí)例形式分析了Python使用split()及正則表達(dá)式進(jìn)行字符串拆分操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04python實(shí)現(xiàn)代碼行數(shù)統(tǒng)計(jì)示例分享
這篇文章主要介紹了python實(shí)現(xiàn)代碼行數(shù)統(tǒng)計(jì)的示例,需要的朋友可以參考下2014-02-02