您的位置:首页技术文章
文章详情页

Python+Appium实现自动抢微信红包

【字号: 日期:2022-06-18 17:19:57浏览:2作者:猪猪
目录环境准备实现思路code环境准备 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 webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.webdriver.common.touch_action import TouchActionfrom selenium.webdriver.support import expected_conditions as ECimport timedesired_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+Appium实现自动抢微信红包的详细内容,更多关于Python 抢微信红包的资料请关注好吧啦网其它相关文章!

标签: 微信 Python
相关文章: