当前位置: 首页 > news >正文

简单步骤比别人抢红包快一步

在这里插入图片描述

🤵‍♂️ 个人主页@老虎也淘气 个人主页
✍🏻作者简介:Python学习者
🐋 希望大家多多支持我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注

快过年了,又到了抢红包的时候,好多小伙伴发愁抢不到,哄包多是多哇一个也抢不到着实让人无奈。
没办法只好发挥所长,我可不是吃素的,那就只能试试能不能通过编程的方式实现自动化抢哄包了!就这么一试,我们居然成功啦。

实现自动化抢红包的基本思路如下:

手动清空之前微信群中的红包记录

执行自动化抢红包程序,首先进入发红包的微信群(可以暂时将其顶置),循环检测群中是否有红包,发现红包则点击红包,没有红包红则不点

检测红包是否被领取(判断点击后的红包是否出现开字),如果红包未被领取,则点击开字领取红包,再返回群聊界面删除已被领取的红包记录;如果红包已被领取,则返回群聊界面删除已被领取的红包记录

环境

本文主要环境如下:

Win11系统
安卓手机
Python3.9
Appium1.5
微信3.8.1.26
如果对环境搭建不熟悉的话,可以看一下:Python + Appium 自动化操作微信入门
用Python找出了删除自己微信的所有人并将他们自动化删除了

实现

下面一起来看一下具体实现。

首先我们·先配置信息,代码实现如下:

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)

在这里插入图片描述

相关文章:

  • 加强网站建设技术培训/全球搜索引擎排行榜
  • 新闻类的网站如何做优化、/网络营销知识点
  • wordpress培训模板/百度seo关键词优化软件
  • 织梦网站图片无缝滚动怎么做/网络营销策划推广
  • wordpress调用不同头部文件/a5站长网网站交易
  • 网站建设实践报告绪论/现在做百度快速收录的方法
  • 和涤生大数据的故事
  • 一个另类博主的辩白
  • 《Buildozer打包实战指南》第一节 在虚拟机中安装Ubuntu系统
  • c++通讯录管理系统
  • 算法记录Day49|leetcode121. 买卖股票的最佳时机 、122.买卖股票的最佳时机II
  • 项目管理平台,如何助力CMMI3-5级高效落地?
  • 自从我学会了Jenkins的自动构建,我再也没有每次都打包上传到服务器然后发布Java服务了
  • LeetCode 62. 不同路径
  • 如何实现外网远程登录访问jupyter notebook?
  • 2021年帆软杯一等奖作品 |《基于数据可视化的中国编程岗位需求分析》
  • C语言综合练习6:制作贪吃蛇
  • 基于云的文档管理系统:DocuWare Cloud