Python+Appium实现自动抢微信红包


Posted in Python onMay 21, 2021

环境准备

  • appium环境
  • 安卓手机
  • usb数据线
  • python环境

实现思路

我们收到红包和消息都是自动置顶到第一个,于是我们打开第一个判断是否有红包,没有则隐藏此窗口。如果有则判断红包是否可以领取,如果有则领取红包,否则删除此红包(不然会影响后面的判断)
然后再进行循环运行和判断。

Python+Appium实现自动抢微信红包

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

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

Python+Appium实现自动抢微信红包

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

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()

Python+Appium实现自动抢微信红包

同时有可能第一个是公众号推送的消息,这样会导致无法判断,所以我们判断只要进去的里面没有红包就把它隐藏掉,然后等新的红包发生过来。

# 删除第一个聊天框
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 webdriver

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.support import expected_conditions as EC
import time

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()


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实现自动抢微信红包的详细内容,更多关于Python 抢微信红包的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
浅析python 中__name__ = '__main__' 的作用
Jul 05 Python
python实现合并两个数组的方法
May 16 Python
Python对数据库操作
Mar 28 Python
Python 实现淘宝秒杀的示例代码
Jan 02 Python
python中使用xlrd读excel使用xlwt写excel的实例代码
Jan 31 Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
Jan 16 Python
详解Python描述符的工作原理
Jun 11 Python
Python预测分词的实现
Jun 18 Python
写好Python代码的几条重要技巧
windows安装python超详细图文教程
python如何正确使用yield
May 21 #Python
详细总结Python常见的安全问题
May 21 #Python
Pycharm 如何设置HTML文件自动补全代码或标签
Python源码解析之List
Python手拉手教你爬取贝壳房源数据的实战教程
You might like
信用卡效验程序
2006/10/09 PHP
php结合飞信 免费天气预报短信
2009/05/07 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
javascript 数组的方法集合
2008/06/05 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
Python多线程编程(四):使用Lock互斥锁
2015/04/05 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
python web基础之加载静态文件实例
2018/03/20 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
毕业生自我鉴定
2013/12/04 职场文书
公司活动总结怎么写
2014/06/25 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
centos8安装MongoDB的详细过程
2021/10/24 MongoDB