亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python+Appium實現自動搶微信紅包的方法

發布時間:2021-05-22 09:28:22 來源:億速云 閱讀:241 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關Python+Appium實現自動搶微信紅包的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

環境準備

  • appium環境

  • 安卓手機

  • usb數據線

  • python環境

實現思路

我們收到紅包和消息都是自動置頂到第一個,于是我們打開第一個判斷是否有紅包,沒有則隱藏此窗口。如果有則判斷紅包是否可以領取,如果有則領取紅包,否則刪除此紅包(不然會影響后面的判斷)
然后再進行循環運行和判斷。

Python+Appium實現自動搶微信紅包的方法

code

首先看一下配置信息,因為我使用得是真機小米9安卓10的系統,代碼實現如下具體的信息填寫請根據自己的真實情況修改:

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

因為點擊紅包后需要判斷點擊后的紅包是否被領取,即是否有開字,如圖所示:

Python+Appium實現自動搶微信紅包的方法

所以我們定義一個判斷元素是否存在的方法,代碼實現如下:

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

因為紅包無論是被自己領取還是被他人領取,之后都要刪除領取后的紅包記錄,所以我們再來定義一個刪除已領取紅包的方法,代碼實現如下:

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

Python+Appium實現自動搶微信紅包的方法

同時有可能第一個是公眾號推送的消息,這樣會導致無法判斷,所以我們判斷只要進去的里面沒有紅包就把它隱藏掉,然后等新的紅包發生過來。

# 刪除第一個聊天框
def del_red_public(wait, driver):
    # 長按第一個聊天框
    r8 = wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/fzg")))
    TouchAction(driver).long_press(r8).perform()
    time.sleep(1)
    # 點擊長按后顯示的刪除
    wait.until(EC.element_to_be_clickable((By.XPATH, "//android.widget.TextView[@text='不顯示該聊天']"))).click()
    # 點擊彈出框的刪除選項
    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",  # 系統
    "platformVersion": "10.0",  # 系統版本號
    "deviceName": "b68548ed",  # 設備名
    "appPackage": "com.tencent.mm",  # 包名
    "appActivity": ".ui.LauncherUI",  # app 啟動時主 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

# 刪除領取后的紅包記錄


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


# 刪除第一個聊天框
def del_red_public(wait, driver):
    # 長按第一個聊天框
    r8 = wait.until(EC.element_to_be_clickable(
        (By.ID, "com.tencent.mm:id/fzg")))
    TouchAction(driver).long_press(r8).perform()
    time.sleep(1)
    # 點擊長按后顯示的刪除
    wait.until(EC.element_to_be_clickable((By.XPATH, "//android.widget.TextView[@text='不顯示該聊天']"))).click()
    # 點擊彈出框的刪除選項
    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)
    # 設置等待
    wait = WebDriverWait(driver, 500)

    while True:
    # 進入第一個聊天窗口
        g73 = wait.until(EC.element_to_be_clickable(
            (By.ID, "com.tencent.mm:id/fzg")))
        g73.click()
        print("進入了第一個聊天窗口")
        # 判斷聊天窗是否是公眾號
        is_weichat = is_element_exist(driver, "id", "com.tencent.mm:id/u1")
        if is_weichat == True:
        # while True:
            # 有紅包則點擊
            wait.until(EC.element_to_be_clickable(
                (By.ID, "com.tencent.mm:id/u1"))).click()
            print("點擊了紅包")
            # 判斷紅包是否被領取
            is_open = is_element_exist(driver, "id", "com.tencent.mm:id/f4f")
            print("紅包是否被領取:", is_open)
            if is_open == True:
                # 紅包未被領取,點擊開紅包
                wait.until(EC.element_to_be_clickable(
                    (By.ID, "com.tencent.mm:id/f4f"))).click()
                print('已經領取紅包')
                # 返回群聊
                driver.keyevent(4)
                # 刪除領取過的紅包記錄
                del_red_envelope(wait, driver)
                print('···刪除已經領取的紅包,等待新的紅包')
                driver.keyevent(4)
            else:
                # 返回群聊
                driver.keyevent(4)
                # 刪除領取過的紅包記錄
                del_red_envelope(wait, driver)
                print('···刪除無法領取的紅包,等待新的紅包')
                driver.keyevent(4)

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

python的五大特點是什么

python的五大特點:1.簡單易學,開發程序時,專注的是解決問題,而不是搞明白語言本身。2.面向對象,與其他主要的語言如C++和Java相比, Python以一種非常強大又簡單的方式實現面向對象編程。3.可移植性,Python程序無需修改就可以在各種平臺上運行。4.解釋性,Python語言寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序。5.開源,Python是 FLOSS(自由/開放源碼軟件)之一。

關于“Python+Appium實現自動搶微信紅包的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广东省| 永兴县| 稻城县| 贡山| 岳西县| 武平县| 鞍山市| 吐鲁番市| 乐昌市| 景东| 杨浦区| 甘肃省| 舟曲县| 专栏| 龙泉市| 华容县| 安多县| 和硕县| 峨山| 格尔木市| 元氏县| 响水县| 营口市| 星子县| 宁波市| 翁牛特旗| 清水河县| 绥化市| 沙田区| 武胜县| 绩溪县| 天津市| 隆昌县| 玉山县| 都兰县| 团风县| 正定县| 江油市| 澜沧| 静安区| 连平县|