基于Python制作个抢红包的工具

作者:程序员野客 时间:2021-12-03 07:53:01 

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 信息,可以避免重新登录
}

因为点击红包后需要判断点击后的红包是否被领取,即是否有开字,如图所示:

基于Python制作个抢红包的工具

所以我们定义一个判断元素是否存在的方法,代码实现如下:

# 判断元素是否存在
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()

长按领取后红包的效果图如下:

基于Python制作个抢红包的工具

点击长按后显示的删除项之后的效果图如下:

基于Python制作个抢红包的工具

我们接着来看一下进入红包群后的主程序实现,代码如下:

while True:
    # 有红包则点击
    wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/r8"))).click()
    print("点击了红包")
    # 判断红包是否被领取
    is_open = is_element_exist(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)

来源:https://mp.weixin.qq.com/s/iJHv7TyM_0aOIUIqz3umdg

标签:Python,抢红包
0
投稿

猜你喜欢

  • js传中文参数controller里获取参数乱码问题解决方法

    2024-04-17 10:30:13
  • Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程

    2022-02-22 07:34:22
  • Oracle8i和Microsoft SQL Server比较

    2010-07-26 13:05:00
  • Python绘制三角函数图(sin\\cos\\tan)并标注特定范围的例子

    2021-06-17 17:53:29
  • Python实现完全数的示例详解

    2021-11-21 20:09:30
  • 浅谈优化Django ORM中的性能问题

    2022-04-08 13:24:27
  • git版本库介绍及本地创建的三种场景方式

    2023-07-11 11:22:18
  • Python快速生成随机密码超简单实现

    2022-08-07 19:26:09
  • Flask中Cookie和Session理解与作用介绍

    2022-05-03 21:50:35
  • Python 中的集合和字典

    2021-03-18 22:53:30
  • 计算机管理服务中找不到mysql的服务的解决办法

    2024-01-26 03:31:34
  • asp如何在第10000名来访者访问时显示中奖页面?

    2010-06-18 19:45:00
  • python图片处理库Pillow实现简单PS功能

    2021-08-29 13:51:23
  • 利用 Python 实现多任务进程

    2023-12-19 02:53:52
  • CMD命令操作MSSQL2005数据库(命令整理)

    2024-01-21 11:14:49
  • Go语言k8s kubernetes使用leader election实现选举

    2024-04-26 17:20:53
  • javascript 用函数语句和表达式定义函数的区别详解

    2024-04-16 09:06:26
  • 利用OpenCV实现YOLO对象检测方法详解

    2021-01-21 06:34:15
  • 一个修改Oracle数据库用户密码的小诀窍

    2009-09-30 15:29:00
  • python实现查询IP地址所在地

    2021-09-08 17:18:43
  • asp之家 网络编程 m.aspxhome.com