最新公告
  • 欢迎您光临灯塔资源网,本站秉承服务宗旨 履行“站长”责任,做国内最专业的站长资源平台!立即加入我们
  • 环境准备

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

    实现思路

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

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

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

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

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

    完整代码如下:

    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('隐藏了第一个聊天框')

    原文链接:https://www.cnblogs.com/huny/p/14395348.html

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,请不要用于商业用途!
    3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"dtmb.taobao.com",如遇到无法解压的请联系管理员!
    8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
    声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

    灯塔资源网 » Python+Appium实现自动抢微信红包

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们.。
    你们有qq群吗怎么加入?
    当然有的,如果你是帝国cms、易优cms、和pbootcms系统的爱好者你可以加入我们的QQ千人交流群https://www.dtymz.com/page-qun.html。

    发表评论

    • 1831会员数(个)
    • 9426资源数(个)
    • 0本周更新(个)
    • 0 今日更新(个)
    • 943稳定运行(天)

    提供最优质的资源集合

    加入VIP
    开通VIP 享更多特权,建议使用 QQ 登录