如何用Python+Appium实现自动抢微信红包
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,本文小编为大家详细介绍"如何用Python+Appium实现自动抢微信红包",内容详细,步骤清晰,细节处理妥当,希望这篇"如何用Python+Appium实现自动抢微信红包"文章能帮助大家解决疑惑,下
千家信息网最后更新 2025年01月21日如何用Python+Appium实现自动抢微信红包实现思路
本文小编为大家详细介绍"如何用Python+Appium实现自动抢微信红包",内容详细,步骤清晰,细节处理妥当,希望这篇"如何用Python+Appium实现自动抢微信红包"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
环境准备
appium环境
安卓手机
usb数据线
python环境
实现思路
我们收到红包和消息都是自动置顶到第一个,于是我们打开第一个判断是否有红包,没有则隐藏此窗口。如果有则判断红包是否可以领取,如果有则领取红包,否则删除此红包(不然会影响后面的判断)
然后再进行循环运行和判断。
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 信息,可以避免重新登录}
因为点击红包后需要判断点击后的红包是否被领取,即是否有开字
所以我们定义一个判断元素是否存在的方法,代码实现如下:
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 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实现自动抢微信红包"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
红包
系统
代码
信息
公众
文章
环境
元素
内容
思路
方法
消息
版本
设备
输入法
安卓
登录
输入
妥当
同时
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全学习教育的目的
两英提花系统软件开发商
软件开发工作服务
数据库技术添加属性完整性约束
华富基金网络安全
传奇怪物数据库
回收服务器戴尔hp
虚拟主机数据库外部访问
网络技术提升步骤
杭州建设智慧工地软件开发
软件开发公司的加班制度
拒不履行网络安全管理义务
机票预订系统数据库设计
科大国创软件开发怎么样
网络安全案例分享2017
遵义本地的软件开发公司
视频服务器发生错误怎么处理
深圳市鑫维泰软件开发公司
并行数据库技术
搜狐电视直播软件开发
台湾的网络安全怎么样
计算机网络技术和应用哪个好
dhcp服务器的地址池是什么
当兵可以学网络技术吗
微软网络安全性
康昔智能秤服务器异常怎么回事
生物数据库分为哪几级
矿机服务器配置要求
机架式服务器管理软件
个人软件开发年度开发总结