愛伊米

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

目錄:

0 引言

1 環境

2 需求分析

3 前置準備

4 搶紅包流程回顧

5 程式碼梳理

6 後記

0 引言

提到搶紅包,就不得不提Xposed框架,它簡直是個搶紅包的神器,但使用Xposed框架有一個前提條件:手機需要root,對於蘋果手機的話就需要越獄了。現在的手機想要root或越獄並不容易,同時這會對手機安全性帶來一些風險,搶紅包本身只是個娛樂活動,這樣做就得不償失了。

為了自動搶紅包,python能幫我們實現嗎?

答案是肯定的,本文就帶大家一起探索下用Python如何實現自動搶紅包。

1 環境

作業系統:Windows

Python版本:3。7。2

手機系統:Android

2 需求分析

這裡我們的需求是實現自動搶紅包。首先要開啟微信,進入到指定的群聊,識別微信紅包、執行搶紅包的動作。這就是關鍵的步驟,簡單清晰。

因為電腦版本的微信沒有搶紅包的功能,我們只能手機微信,那麼就需要把手機連上電腦,透過電腦控制手機來自動搶,那就需要確保「

adb

」命令可正常執行。

識別微信中的訊息,是紅包還是普通的資訊,這裡我們透過聊天訊息的元素標識來判斷。這裡我們藉助了「

Airtest IDE

」工具來實現。

3 前置準備

3.1 開啟手機的USB除錯

要正常使用「adb」需要開啟USB除錯,設定項通常出現在手機系統設定中的[開發人員選項]裡面。

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

在手機上開啟USB除錯後,接下來我們透過Airttest IDE驗證 adb 執行是否正常。

3.2 下載安裝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的介面如下:

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

使用AirtestIDE對Android應用進行自動化操作,第一步就需要連線Android裝置。

請使用USB線連線手機,手機上出現的

允許USB除錯

彈窗,點選

確定

點選連接面板中的

refresh ADB

按鈕,裝置列表將會重新整理。

點選列表內對應裝置的

Connect

完成連線。

若裝置未刷出,點選

refresh ADB

按鈕。

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

若連線遇到問題,請參考Airtest的官方教程:Android真機連線

4 搶紅包流程回顧

開啟微信,在最左側的Tab頁,微信訊息列表,我們需要從這裡選擇指定的群聊來搶紅包。

在AirtestIDE中,我們可以透過暫停功能,凍結當前的UI樹形結構來精確地檢視UI控制元件,我們先來分析下這個頁面中元素標識。

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

▲聊天頁面中整體的群聊訊息的元素標識 com。tencent。mm:id/d1v

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

▲聊天頁面中單個群聊訊息的元素標識 com。tencent。mm:id/b6e

接下來進入我們準備要搶紅包的群聊中,識別出紅包並執行搶紅包的動作。

我們先來看看紅包的標識:

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

▲紅包標識的示例1 com。tencent。mm:id/aql

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

▲紅包標識的示例2  com。tencent。mm:id/aql

點選紅包,記錄下彈出的大紅包頁面中“開”的元素標識

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

▲大紅包頁面中”開“的標識 com。tencent。mm:id/d02

這裡我們需要判斷是紅包是否有效,比如已被領完或是已被自己領取的紅包就是無效的,我們在執行時可以跳過這些。

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

▲已領取紅包的標識 com。tencent。mm:id/apk

Python自動搶紅包,超詳細教程,再也不會錯過微信紅包了!

▲已被領完紅包的標識 com。tencent。mm:id/apk

我們用的各元素的標識都已取到,接下來就是組織我們的程式碼。

5 程式碼梳理

首先得開啟微信,利用Airtest啟動app應用,只須一行程式碼即可搞定,如下

# 開啟手機微信

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(‘請指定群聊名稱:’)

if chat in Chat_names:

index = Chat_names。index(chat)

# 點選進入指定的群聊

Chat_msg[index]。click()

在微信聊天頁面中,獲取當前頁面中的所有訊息元素。

msg_list = poco(“android。widget。ListView”)。children()

遍歷訊息並查詢紅包

for msg in msg_list:

# 微信紅包的標識

LuckyMoney = msg。offspring(‘com。tencent。mm:id/aql’)

# 已失效紅包(比如已領取、已被領完)的標識

Invalid = msg。offspring(‘com。tencent。mm:id/aqk’)

# 判斷紅包是否有效並搶起來!

if LuckyMoney:

pass

在LuckyMoney中定義搶紅包的動作

if Invalid。exists() and (Invalid。get_text()==‘已領取’ or Invalid。get_text()==‘已被領完’):

print(f‘紅包已無效,跳過……’)

continue

else:

print(f‘發現一個新紅包,搶起來!’)

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,還能執行這個指令碼嗎?

當然可以,只需要安裝好「

pocoui

」這個第三方庫就可以“拋棄”它了!

pip install pocoui

利用 AirtestIDE 建立一個專案時,裝置型別選中 Android,就會在編碼區生成一段初始化的程式碼。

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程式碼中也需要加上這段初始化的程式碼。

再次強調,在執行指令碼時要確保手機連上電腦,並確保「adb」命令正常執行。

對Airtest有興趣的小夥伴,可以參考airtest官方教程:AirtestIDE官方文件

評論區評論:

python搶紅包

,獲取本文所涉及的完整程式碼