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

 更新时间:2023年01月10日 09:04:58   作者:程序员野客  
快过年了,刚刚收到了两个消息,一个好消息,一个坏消息。好消息就是微信群里有人要发红包,坏消息是不一定能都抢到。所以本文就来用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_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)

到此这篇关于基于Python制作个抢红包的工具的文章就介绍到这了,更多相关Python抢红包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python爬虫多次请求超时的几种重试方法(6种)

    python爬虫多次请求超时的几种重试方法(6种)

    这篇文章主要介绍了python爬虫多次请求超时的几种重试方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • pycharm使用matplotlib.pyplot不显示图形的解决方法

    pycharm使用matplotlib.pyplot不显示图形的解决方法

    今天小编就为大家分享一篇pycharm使用matplotlib.pyplot不显示图形的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】

    Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】

    这篇文章主要介绍了Python3爬虫爬取英雄联盟高清桌面壁纸功能,结合实例形式分析了基于Scrapy爬虫框架进行图片爬取的相关项目创建、文件结构、功能实现操作技巧与注意事项,需要的朋友可以参考下
    2018-12-12
  • 深度总结Python中字符串的使用

    深度总结Python中字符串的使用

    本文主要来学习字符串数据类型相关知识,包括讨论如何声明字符串数据类型,字符串数据类型与 ASCII 表的关系等内容,超级干货,不容错过
    2023-08-08
  • Pandas替换NaN值的方法实现

    Pandas替换NaN值的方法实现

    本文主要介绍了Pandas替换NaN值的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python 如何实现批量转换视频音频的采样率

    Python 如何实现批量转换视频音频的采样率

    这篇文章主要分享一个python代码,可以将多个视频中的音频转化为相同采样率的视频,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2021-11-11
  • Python 数据处理库 pandas进阶教程

    Python 数据处理库 pandas进阶教程

    在前面一篇文章中,我们对pandas做了一些入门介绍。本文是它的进阶篇。在这篇文章中,我们会讲解一些更深入的知识
    2018-04-04
  • 图文详解Python中如何简单地解决Microsoft Visual C++ 14.0报错

    图文详解Python中如何简单地解决Microsoft Visual C++ 14.0报错

    有的时候安装python依赖包的时候,报错信息"Microsoft visual c++ 14.0 is required"的解决办法,下面这篇文章主要给大家介绍了关于Python中如何简单地解决Microsoft Visual C++ 14.0报错的相关资料,需要的朋友可以参考下
    2023-02-02
  • python 用struct模块解决黏包问题

    python 用struct模块解决黏包问题

    这篇文章主要介绍了python 用struct模块解决黏包问题,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • Pandas中KeyError: 'Column_Name' not in index”的报错分析

    Pandas中KeyError: 'Column_Name' not 

    在使用Pandas进行数据处理时,KeyError: 'Column_Name' not in index是一种常见的错误,它通常发生在尝试访问DataFrame中不存在的列名时,本文将深入分析这一错误的原因、提供解决办法,需要的朋友可以参考下
    2024-07-07

最新评论