要搶紅包?Python來幫你~



目 標 場 景

相信這兩天你們都忙碌於各種微信羣中,專一搶紅包。那是否能夠利用 Python 實現自動搶紅包呢?python


答案是確定的。這篇文章的目的是利用「Airtest」實現全自動搶羣紅包。android


ps:紅包只是圖個樂呵,但願本篇文章僅僅用於學習。spring


準 備 工 做

首先須要在本機上配置好 Airtest 環境,配置及基本的使用方法查看「原文連接」查看。api


其次,因爲我使用的 Android 手機,因此須要提早配置好 Android 開發環境,保證「adb」命令正常運行。bash


打開 AirtestIDE,用數據線連上 PC後,就能夠點擊右上角的 connect 鏈接設備。微信



設備鏈接成功以後,緊接着滑動手機界面到包含「微信圖標」的頁面,就能夠正式進入下面的操做了。函數



利用 AirtestIDE 新建一個項目,設備類型選中 Android,就會在編碼區生成一段初始化的代碼。學習


# -*- encoding=utf8 -*-
__author__ = "xingag"

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)
複製代碼


拷貝上面的代碼到 Pycharm 中,並安裝「pocoui」庫。測試


pip3 install pocoui
複製代碼


ps:注意 Mac OS 安裝會提示 adb 沒有運行權限,只須要授予響應的權限便可。ui


# chmod +x /Users/xingag/anaconda3/lib/python3.7/site-packages/airtest/core/android/static/adb/mac/adb
chmod +x [本機adb路徑]

複製代碼


這裏我新建了一個名稱爲「搶紅包」微信羣,便於後面的測試。


分 析 思 路

首先咱們須要打開微信 App。


相比 Appium 須要經過包名和啓動 Activity 的形式,Airtest 經過一行代碼就能夠實現打開應用。


# 指定當前界面text內容爲【微信】的控件,執行點擊操做
poco(text='微信').click()
複製代碼


第一個 Tab 就是微信消息列表,這裏顯示了全部的羣聊、單聊及一些消息。



經過「元素 name」找到全部的消息列表元素,而後就能夠全部消息的內容。


# 消息列表
item_elements = poco(name='com.tencent.mm:id/b4m').offspring('com.tencent.mm:id/b4o')

# 獲取全部消息列表的名稱
names = list(map(lambda x: x.get_text(), item_elements))
複製代碼


找到目標羣元素,就能夠執行點擊操做,進入羣聊。


# 羣名稱
target = '搶紅包'

index = names.index(target)
# 點擊進入羣聊
item_elements[index].click()
複製代碼


而後獲取到當前羣聊的全部消息元素。


# 1.獲取消息列表元素
msg_list_elements_pre = poco("android.widget.ListView").children()
複製代碼


搶紅包須要從最近的一個紅包開始搶,全部須要反轉羣聊消息。


msg_list_elements = []

for item in msg_list_elements_pre:
    msg_list_elements.insert(0, item)
複製代碼


接下來就能夠遍歷消息列表,獲取到有「微信紅包」微信紅包標識而且尚未搶的紅包「包含本身發的」消息元素。


for msg_element in msg_list_elements:

        # 2.1 微信紅包標識元素
        red_key_element = msg_element.offspring('com.tencent.mm:id/apf')

        # 2.2 是否已經領取元素
        has_click_element = msg_element.offspring('com.tencent.mm:id/ape')

        # 2.3 紅包【包含:收到的紅包和本身發出去的紅包】
        if red_key_element:
            print('發現一個紅包')
            if has_click_element.exists() and (
                    has_click_element.get_text() == '已領取' or has_click_element.get_text() == '已被領完'):
                print('已經領取過了,略過~')
                continue
            else:
               print('立刻搶紅包')
        else:
            print('紅包元素不存在')
            continue
複製代碼



搶紅包的操做就很簡單了。點擊還未搶過的紅包,到搶紅包對話框界面,點擊「」按鈕,就能夠模擬搶一個紅包的操做了。


搶完紅包以後,須要模擬點擊手機上的返回按鍵到消息列表頁面,接着執行下一個搶紅包的操做。


msg_element.click()

click_element = poco("com.tencent.mm:id/cv0")
if click_element.exists():
       click_element.click()
       
       # 返回
       keyevent('BACK')
複製代碼



最後,把上面搶紅包的操做定義爲一個方法,循環來獲取消息列表,獲取到新的紅包後,立刻執行「搶紅包」的操做。


while True:
     get_red_package()
     print('休眠1秒鐘,繼續刷新頁面,開始搶紅包。')
     sleep(1)複製代碼


結 果 總 結

執行程序,手機會自動打開微信,找到對應的羣聊,進入消息列表頁面,「定時」檢查列表中的信息,若是發現有紅包,就開始搶紅包。


固然,消息列表頁能夠經過 swipe 函數向上滑動,獲取更多的紅包,原理相似。




本文首發於公衆號「 AirPython 」,後臺回覆「 搶紅包 」便可獲取完整代碼。

相關文章
相關標籤/搜索