这篇文章将为大家详细讲解有关Python+Appium实现自动抢微信红包的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
appium环境
安卓手机
usb数据线
python环境
我们收到红包和消息都是自动置顶到第一个,于是我们打开第一个判断是否有红包,没有则隐藏此窗口。如果有则判断红包是否可以领取,如果有则领取红包,否则删除此红包(不然会影响后面的判断)
然后再进行循环运行和判断。
首先看一下配置信息,因为我使用得是真机小米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 信息,可以避免重新登录 }
因为点击红包后需要判断点击后的红包是否被领取,即是否有开字,如图所示:
所以我们定义一个判断元素是否存在的方法,代码实现如下:
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()
完整代码如下:
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的五大特点:1.简单易学,开发程序时,专注的是解决问题,而不是搞明白语言本身。2.面向对象,与其他主要的语言如C++和Java相比, Python以一种非常强大又简单的方式实现面向对象编程。3.可移植性,Python程序无需修改就可以在各种平台上运行。4.解释性,Python语言写的程序不需要编译成二进制代码,可以直接从源代码运行程序。5.开源,Python是 FLOSS(自由/开放源码软件)之一。
关于“Python+Appium实现自动抢微信红包的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。