用Python实现微信自动化抢红包,再也不用担心抢不到红包了
1. 概述
刚刚收到了两个消息,一个好消息,一个坏消息。
先说好消息,好消息就是微信群里有人要发红包,开心~
不过转念一想,前几次的红包一个都没抢到,这次???不由自主的叹了一口气 ...
过了一会,内心的情绪逐渐平复了。
心想:“难道就这么放弃了吗?晚饭还吃泡面(泡面感觉有被冒犯到)?但是手动抢肯定没戏,毕竟手can谁也没办法!那就只能试试能不能通过编程的方式实现自动化抢红包了!”
现在捋一下思路,微信群发红包的基本情况是:每一次发红包都会与上一次有一些时间间隔,实现自动化抢红包的基本思路如下:
-
手动清空之前微信群中的红包记录
-
执行自动化抢红包程序,进入发红包的微信群(可以暂时将其顶置),循环检测群中是否有红包,发现红包则点击红包
-
检测红包是否被领取(判断点击后的红包是否出现开字),如果红包未被领取,则点击开字领取红包,再返回群聊界面删除已被领取的红包记录;如果红包已被领取,则返回群聊界面删除已被领取的红包记录,之后以此类推
2. 环境
本文主要环境如下:
- Win7
- 小米5s
- Python3.7
- Appium1.5
- 微信7.0.20
如果对环境搭建不熟悉的话,可以看一下:Python + Appium 自动化操作微信入门 和 我用 Python 找出了删除我微信的所有人并将他们自动化删除了。
3. 实现
接下来我们开始手动敲代码,下面一起来看一下具体实现。
首先看一下配置信息,代码实现如下:
desired_caps = { "platformName": "Android", # 系统 "platformVersion": "8.0.0", # 系统版本号 "deviceName": "m5s", # 设备名 "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/r8"))) TouchAction(driver).long_press(r8).perform() # 点击长按后显示的删除 wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/gam"))).click() # 点击弹出框的删除选项 wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/doz"))).click()
长按领取后红包的效果图如下:
点击长按后显示的删除项之后的效果图如下:
我们接着来看一下进入红包群后的主程序实现,代码如下:
while True: # 有红包则点击 wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/r8"))).click() print("点击了红包") # 判断红包是否被领取 is_open = is_element_ex 1044 ist(driver, "id", "com.tencent.mm:id/den"); print("红包是否被领取:", is_open) if is_open == True: # 红包未被领取,打开红包 wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/den"))).click() # 返回群聊 wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/dm"))).click() # 删除领取过的红包记录 del_red_envelope(wait, driver) else: # 返回群聊 driver.keyevent(4) # 删除领取过的红包记录 del_red_envelope(wait, driver)
源码在公号 Python小二 后台回复 201123 获取。
- 用Python实现定时自动化收取蚂蚁森林能量,再也不用担心忘记收取了
- Python实现的微信红包提醒功能示例
- 有了这个再也不担心任何微信红包,Python就是好用~
- python3+uiautomator2实现POM(微信小程序自动化测试)QQ群交流 822659419
- Python微信刷投票源码!用PY实现自动化刷投票
- python实现12306抢票,春节不用担心买不到票回家了
- PAMIE- Python实现IE自动化的模块
- php实现微信发红包
- 转:PAMIE- Python实现IE自动化的模块
- Python+Django开发微信公众号验证通过但微信推送信息接收不到的问题解答
- 基于python实现微信模板消息
- 连年的红包大战,微信、支付宝先后实现了“从0到1”
- python实现自动化远程控制(2)--构造抽象类和接口
- PAMIE- Python实现IE自动化的模块
- 运维自动化之Python 实现自动配置raid 级别
- 春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
- python如何实现远程控制电脑(结合微信)
- 微信红包签名算法 C#代码实现
- 微信红包的算法实现
- 微信红包的算法实现