濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Python+Appium實(shí)現(xiàn)自動(dòng)搶微信紅包

Python+Appium實(shí)現(xiàn)自動(dòng)搶微信紅包

熱門(mén)標(biāo)簽:沈陽(yáng)外呼系統(tǒng)呼叫系統(tǒng) 外呼系統(tǒng)哪些好辦 富錦商家地圖標(biāo)注 武漢外呼系統(tǒng)平臺(tái) 池州外呼調(diào)研線路 沈陽(yáng)防封電銷卡品牌 沈陽(yáng)人工外呼系統(tǒng)價(jià)格 如何申請(qǐng)400電話費(fèi)用 江西省地圖標(biāo)注

環(huán)境準(zhǔn)備

  • appium環(huán)境
  • 安卓手機(jī)
  • usb數(shù)據(jù)線
  • python環(huán)境

實(shí)現(xiàn)思路

我們收到紅包和消息都是自動(dòng)置頂?shù)降谝粋€(gè),于是我們打開(kāi)第一個(gè)判斷是否有紅包,沒(méi)有則隱藏此窗口。如果有則判斷紅包是否可以領(lǐng)取,如果有則領(lǐng)取紅包,否則刪除此紅包(不然會(huì)影響后面的判斷)
然后再進(jìn)行循環(huán)運(yùn)行和判斷。

code

首先看一下配置信息,因?yàn)槲沂褂玫檬钦鏅C(jī)小米9安卓10的系統(tǒng),代碼實(shí)現(xiàn)如下具體的信息填寫(xiě)請(qǐng)根據(jù)自己的真實(shí)情況修改:

desired_caps = {
    "platformName": "Android",  # 系統(tǒng)
    "platformVersion": "10.0",  # 系統(tǒng)版本號(hào)
    "deviceName": "b68548ed",  # 設(shè)備名
    "appPackage": "com.tencent.mm",  # 包名
    "appActivity": ".ui.LauncherUI",  # app 啟動(dòng)時(shí)主 Activity
    'unicodeKeyboard': True,  # 使用自帶輸入法
    'noReset': True  # 保留 session 信息,可以避免重新登錄
}

因?yàn)辄c(diǎn)擊紅包后需要判斷點(diǎn)擊后的紅包是否被領(lǐng)取,即是否有開(kāi)字,如圖所示:

所以我們定義一個(gè)判斷元素是否存在的方法,代碼實(shí)現(xiàn)如下:

def is_element_exist(driver, by, value):
    try:
        driver.find_element(by=by, value=value)
    except Exception as e:
        return False
    else:
        return True

因?yàn)榧t包無(wú)論是被自己領(lǐng)取還是被他人領(lǐng)取,之后都要?jiǎng)h除領(lǐng)取后的紅包記錄,所以我們?cè)賮?lái)定義一個(gè)刪除已領(lǐng)取紅包的方法,代碼實(shí)現(xiàn)如下:

def del_red_envelope(wait, driver):
    # 長(zhǎng)按領(lǐng)取過(guò)的紅包
    r8 = wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/ahs")))
    TouchAction(driver).long_press(r8).perform()
    time.sleep(1)
    # 點(diǎn)擊長(zhǎng)按后顯示的刪除
    wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/dt5"))).click()
    # 點(diǎn)擊彈出框的刪除選項(xiàng)
    wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/ffp"))).click()

同時(shí)有可能第一個(gè)是公眾號(hào)推送的消息,這樣會(huì)導(dǎo)致無(wú)法判斷,所以我們判斷只要進(jìn)去的里面沒(méi)有紅包就把它隱藏掉,然后等新的紅包發(fā)生過(guò)來(lái)。

# 刪除第一個(gè)聊天框
def del_red_public(wait, driver):
    # 長(zhǎng)按第一個(gè)聊天框
    r8 = wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/fzg")))
    TouchAction(driver).long_press(r8).perform()
    time.sleep(1)
    # 點(diǎn)擊長(zhǎng)按后顯示的刪除
    wait.until(EC.element_to_be_clickable((By.XPATH, "http://android.widget.TextView[@text='不顯示該聊天']"))).click()
    # 點(diǎn)擊彈出框的刪除選項(xiàng)
    wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/ffp"))).click()

完整代碼如下:

from appium import webdriver

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.support import expected_conditions as EC
import time

desired_caps = {
    "platformName": "Android",  # 系統(tǒng)
    "platformVersion": "10.0",  # 系統(tǒng)版本號(hào)
    "deviceName": "b68548ed",  # 設(shè)備名
    "appPackage": "com.tencent.mm",  # 包名
    "appActivity": ".ui.LauncherUI",  # app 啟動(dòng)時(shí)主 Activity
    'unicodeKeyboard': True,  # 使用自帶輸入法
    'noReset': True  # 保留 session 信息,可以避免重新登錄
}

# 判斷元素是否存在

def is_element_exist(driver, by, value):
    try:
        driver.find_element(by=by, value=value)
    except Exception as e:
        return False
    else:
        return True

# 刪除領(lǐng)取后的紅包記錄


def del_red_envelope(wait, driver):
    # 長(zhǎng)按領(lǐng)取過(guò)的紅包
    r8 = wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/ahs")))
    TouchAction(driver).long_press(r8).perform()
    time.sleep(1)
    # 點(diǎn)擊長(zhǎng)按后顯示的刪除
    wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/dt5"))).click()
    # 點(diǎn)擊彈出框的刪除選項(xiàng)
    wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/ffp"))).click()


# 刪除第一個(gè)聊天框
def del_red_public(wait, driver):
    # 長(zhǎng)按第一個(gè)聊天框
    r8 = wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/fzg")))
    TouchAction(driver).long_press(r8).perform()
    time.sleep(1)
    # 點(diǎn)擊長(zhǎng)按后顯示的刪除
    wait.until(EC.element_to_be_clickable((By.XPATH, "http://android.widget.TextView[@text='不顯示該聊天']"))).click()
    # 點(diǎn)擊彈出框的刪除選項(xiàng)
    wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/ffp"))).click()


if __name__ == '__main__':
    driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)
    # 設(shè)置等待
    wait = WebDriverWait(driver, 500)

    while True:
    # 進(jìn)入第一個(gè)聊天窗口
        g73 = wait.until(EC.element_to_be_clickable(
            (By.ID, "com.tencent.mm:id/fzg")))
        g73.click()
        print("進(jìn)入了第一個(gè)聊天窗口")
        # 判斷聊天窗是否是公眾號(hào)
        is_weichat = is_element_exist(driver, "id", "com.tencent.mm:id/u1")
        if is_weichat == True:
        # while True:
            # 有紅包則點(diǎn)擊
            wait.until(EC.element_to_be_clickable(
                (By.ID, "com.tencent.mm:id/u1"))).click()
            print("點(diǎn)擊了紅包")
            # 判斷紅包是否被領(lǐng)取
            is_open = is_element_exist(driver, "id", "com.tencent.mm:id/f4f")
            print("紅包是否被領(lǐng)?。?, is_open)
            if is_open == True:
                # 紅包未被領(lǐng)取,點(diǎn)擊開(kāi)紅包
                wait.until(EC.element_to_be_clickable(
                    (By.ID, "com.tencent.mm:id/f4f"))).click()
                print('已經(jīng)領(lǐng)取紅包')
                # 返回群聊
                driver.keyevent(4)
                # 刪除領(lǐng)取過(guò)的紅包記錄
                del_red_envelope(wait, driver)
                print('···刪除已經(jīng)領(lǐng)取的紅包,等待新的紅包')
                driver.keyevent(4)
            else:
                # 返回群聊
                driver.keyevent(4)
                # 刪除領(lǐng)取過(guò)的紅包記錄
                del_red_envelope(wait, driver)
                print('···刪除無(wú)法領(lǐng)取的紅包,等待新的紅包')
                driver.keyevent(4)

        else:
            print('沒(méi)有紅包則隱藏此聊天框')
            # 返回群聊
            driver.keyevent(4)
            # 刪除第一個(gè)公眾號(hào)窗口
            del_red_public(wait, driver)
            print('隱藏了第一個(gè)聊天框')

以上就是Python+Appium實(shí)現(xiàn)自動(dòng)搶微信紅包的詳細(xì)內(nèi)容,更多關(guān)于Python 搶微信紅包的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Python模擬登錄網(wǎng)易云音樂(lè)并自動(dòng)簽到
  • Python爬蟲(chóng)之自動(dòng)爬取某車之家各車銷售數(shù)據(jù)
  • Python一行代碼實(shí)現(xiàn)自動(dòng)發(fā)郵件功能
  • 使用Gitee自動(dòng)化部署python腳本的詳細(xì)過(guò)程
  • Python實(shí)現(xiàn)網(wǎng)絡(luò)自動(dòng)化eNSP
  • python 辦公自動(dòng)化——基于pyqt5和openpyxl統(tǒng)計(jì)符合要求的名單
  • 瀏覽器常用基本操作之python3+selenium4自動(dòng)化測(cè)試(基礎(chǔ)篇3)
  • Python自動(dòng)化之定位方法大殺器xpath
  • 還在手動(dòng)蓋樓抽獎(jiǎng)?教你用Python實(shí)現(xiàn)自動(dòng)評(píng)論蓋樓抽獎(jiǎng)(一)

標(biāo)簽:株洲 阿里 黑龍江 常德 潛江 呂梁 銅川 通遼

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python+Appium實(shí)現(xiàn)自動(dòng)搶微信紅包》,本文關(guān)鍵詞  Python+Appium,實(shí)現(xiàn),自動(dòng),搶微,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python+Appium實(shí)現(xiàn)自動(dòng)搶微信紅包》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Python+Appium實(shí)現(xiàn)自動(dòng)搶微信紅包的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    肥东县| 灵丘县| 成都市| 张家界市| 上思县| 汪清县| 蓬莱市| 江西省| 天长市| 常州市| 桐乡市| 乳山市| 大同县| 湘乡市| 廊坊市| 阿克陶县| 永嘉县| 汽车| 汽车| 光山县| 临武县| 泰州市| 合川市| 长武县| 双柏县| 上林县| 山丹县| 来凤县| 原平市| 肇东市| 江孜县| 澄迈县| 乐山市| 海口市| 长岛县| 郓城县| 丰城市| 漯河市| 南阳市| 延长县| 商水县|