Python代碼實戰項目(秒搶紅包)


一、知識點分析

1.AirtestIDE:
  是一個配套推出的跨平台的UI自動化測試編輯器,內置了Airtest和Poco的相關插件功能,能夠使用它快速簡單地編寫腳。
2.pycharm:
  PyCharm是一種Python IDE(Integrated Development Environment,集成開發環境),帶有一整套可以幫助用戶在使用Python語言開發時提高其效率的工具,比如調試、語法高亮、項目管理、代碼跳轉、智能提示、自動完成、單元測試、版本控制。此外,該IDE提供了一些高級功能,以用於支持Django框架下的專業Web開發。
3.逍遙模擬器(非必須):
  Android手機模擬器,其他模擬器也可以,例:網易Mumu、夜神、逍遙、iTools、天天、海馬玩、BlueStacks等。


模擬器連接端口匯總

二、環境及安裝包

1.操作系統
  Windows 10 家庭中文版
2.軟件包

       AirtestIDEAirtestIDE-win-1.2.13.zip_免費高速下載|百度網盤-分享無限制 (baidu.com)【提取碼:csak】
  Pycharm社區版pycharm-community-2020.1.exe_免費高速下載|百度網盤-分享無限制 (baidu.com)【提取碼:csak】
  逍遙模手游擬器XYAZ-Setup-7.6.5-haa539ed70.exe_免費高速下載|百度網盤-分享無限制 (baidu.com)【提取碼:csak】
  Python-3.7.2環境python-3.7.2-amd64.exe_免費高速下載|百度網盤-分享無限制 (baidu.com)【提取碼:csak】

三、軟件安裝步驟(環境准備)

1、解壓 AirtestIDE-win-1.2.13.zip創建AirtestIDE快捷方式(過程簡單不在贅述)
2、雙擊 pycharm-community-2020.1.exe默認下一步安裝即可(過程簡單不在贅述)
3、雙擊 XYAZ-Setup-7.6.5-haa539ed70.exe默認下一步安裝即可(過程簡單不在贅述)
4、雙擊 python-3.7.2-amd64.exe默認下一步安裝即可(過程簡單不在贅述)
1)、配置python環境變量:
查看python安裝路徑

復制python絕對路徑

 win+R-->輸入 sysdm.cpl回車-->點擊“高級”-->點擊“環境變量”-->雙擊"Path"

 點擊 “新建”粘貼剛才復制的python路徑后依次點擊確定即可

2)、利用pycharm安裝所需模塊
打開 pycharm利用pip3安裝poco模塊:

新建python虛擬環境后隨意創建個py文件,點擊下方Terminal終端輸入:pip3 install pocoui
如圖:(因為我已經安裝,正常安裝需要幾分鍾時間,看網速快慢)

(注意:進行上邊步驟 前需要提前配置pycharm的python,也就是告訴pycharm你安裝的python在哪里,自行百度配置這里不在贅述。)

 

3)、逍遙模擬器設置
去 應用商城下載某信,然后 打開開發者模式:
點擊“設置”

 

點擊 最下發“關於平板 電腦”

 

 雙擊“版本號”(會有提示:告訴你雙擊幾次后打開開發者模式)

返回上一級最底部會出現“開發者選項”點擊進入,開啟
USB調試

 

四、代碼分析

1.引入poco模塊

# -*- encoding=utf8 -*-
__author__ = "Mr.WangXinkun"

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)

2.模仿手指點擊打開“某信”

poco(text='某信').click()

3.獲取某信群消息列表

item_elements = poco(name='com.tencent.mm:id/f67').offspring('com.tencent.mm:id/fzg')

4.獲取某信群消息列表名稱

names = list(map(lambda x: x.get_text(), item_elements))

5.指定群名稱(人名稱亦同)

target = '阿坤紅包測試'
index = names.index(target)

6.點擊進入群聊

item_elements[index].click()

7.獲取群內每條消息元素

msg_list_elements_pre = poco("com.tencent.mm:id/awv").children()

8.從最近的一個紅包開始搶,所有需要反轉群聊消息

msg_list_elements = []
for item in msg_list_elements_pre: 
    msg_list_elements.insert(0, item)

9.篩選紅包和已失效紅包

for msg_element in msg_list_elements:

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

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

        # 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

10.搶紅包

msg_element.click()
click_element = poco("com.tencent.mm:id/f4f")
if click_element.exists():
    click_element.click()
    #返回
    keyevent('BACK')

11.持續輸出

while True:
        #寫成一個方法持續搶紅包
        get_red_package()
        print('休眠1秒鍾,繼續刷新頁面,開始搶紅包。')
        sleep(1)

五、代碼整合實踐

代碼整合:

 

# -*- encoding=utf8 -*-
__author__ = "Mr.WangXinkun"

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)

#打開某信
poco(text='某信').click()




# 消息列表
item_elements = poco(name='com.tencent.mm:id/f67').offspring('com.tencent.mm:id/fzg')
# 獲取所有消息列表的名稱
names = list(map(lambda x: x.get_text(), item_elements))

# 群名稱
target = '阿坤紅包測試'
index = names.index(target)
# 點擊進入群聊
item_elements[index].click()

def get_red_package():
# 1.獲取消息列表元素
    msg_list_elements_pre = poco("com.tencent.mm:id/awv").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/u5')

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

            # 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/f4f")
            if click_element.exists():
                click_element.click()

                keyevent('BACK')


#持續輸出
while True:
        get_red_package()
        print('休眠1秒鍾,繼續刷新頁面,開始搶紅包。')
        sleep(1)

1.打開AirtestIDE,將上方代碼復制黏貼:

 

 2.遠程設備鏈接設置
adb connect 127.0.0.1:21503

 

3.點擊“連接”->點擊“刷新ADB”

 

 4.點擊connect

 

 5.點擊左上方運行代碼

 

 6.運行效果如下 :

 

 注意事項:
  代碼總體架構是直接可以跑的,但是由於每個設備的 某信name元素是不一樣,所以需要替換代碼中的六個name元素:
1.某信 首頁群消息列表ListView元素

com.tencent.mm:id/f67

2.群名稱name元素

com.tencent.mm:id/fzg

3.群內消息列表ListView元素

com.tencent.mm:id/awv

4.“某信紅包”識別元素

com.tencent.mm:id/u5

5.紅包“已領取”識別元素

com.tencent.mm:id/tt

6.紅包“開”按鈕元素

com.tencent.mm:id/f4f

(注:元素更換方法稍微有基礎的小伙伴5分鍾就可以完成,也可點贊 +關注+轉發+評論 私聊博主教你)

六、總結

  由於時間有限,目前實現的是指定固定的群名稱進行紅包消息篩選搶紅包。消息列表頁可以通過 swipe 函數向上滑動,獲取更多的紅包,原理類似。感興趣的小伙伴可以自行研究一下哈!喜歡的小伙伴可以點點關注,博主會不定期更新一些大家 感興趣的Python實戰項目!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM