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

在這裏插入圖片描述

目錄: 0 引言 1 環境 2 需求分析 3 前置準備 4 搶紅包流程回顧 5 代碼梳理 6 後記python

0 引言

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

爲了自動搶紅包,python能幫咱們實現嗎?spring

答案是確定的,本文就帶你們一塊兒探索下用Python如何實現自動搶紅包。小程序

1 環境

操做系統:Windows微信小程序

Python版本:3.7.2api

手機系統:Android安全

2 需求分析

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

由於電腦版本的微信沒有搶紅包的功能,咱們只能手機微信,那麼就須要把手機連上電腦,經過電腦控制手機來自動搶,那就須要確保「adb」命令可正常執行。app

識別微信中的消息,是紅包仍是普通的信息,這裏咱們經過聊天消息的元素標識來判斷。這裏咱們藉助了「Airtest IDE」工具來實現。框架

3 前置準備

3.1 打開手機的USB調試

要正常使用「adb」須要打開USB調試,設置項一般出如今手機系統設置中的[開發人員選項]裏面。

在這裏插入圖片描述

在手機上打開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的界面以下:

在這裏插入圖片描述

使用AirtestIDE對Android應用進行自動化操做,第一步就須要鏈接Android設備。

  1. 請使用USB線鏈接手機,手機上出現的 容許USB調試 彈窗,點擊 肯定。
  2. 點擊鏈接面板中的 refresh ADB 按鈕,設備列表將會刷新。
  3. 點擊列表內對應設備的 Connect 完成鏈接。
  4. 若設備未刷出,點擊 refresh ADB 按鈕。

在這裏插入圖片描述

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

4 搶紅包流程回顧

打開微信,在最左側的Tab頁,微信消息列表,咱們須要從這裏選擇指定的羣聊來搶紅包。

在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

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

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專欄」,後臺回覆:python搶紅包,獲取本文所涉及的完整代碼

相關文章
相關標籤/搜索