热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python+appium自动化实例(一):使用Python3+appium实现自动收取支付宝蚂蚁森林能量

一、环境搭建1、下载安装appium。在官网http:appium.io下载appium安装包,并进行安装。2、安装AndroidSDK。可直接在(https:a

Python+appium自动化实例(一):使用Python3+appium实现自动收取支付宝蚂蚁森林能量

一、环境搭建

 

1、下载安装appium。在官网http://appium.io/ 下载appium安装包,并进行安装。

2、安装Android SDK。可直接在(https://android-sdk.en.softonic.com)中下载。也可先安装 Android Studio ,然后在Android Studio 中进行安装。

3、配置环境变量:新增变量名:ANDROID_HOME,对应值为Android SDK路径。如:D:AndroidSdk。然后找到Path,并在里面添加:%ANDROID_HOME%platform-tools。

 

二、简单介绍

 

1、启动appium。

  (1)直接点击start server。

 

 

 (2)启动会话,点击第一个按钮。当前页面可以查看实时日志, 查看所有日志可点击第二个按钮。停止此次服务会话,点击第三个按钮停止服务。

 

 

 会话启动后如下图页面:

3、连接手机前,需要在手机设置开发者模式中设置,允许USB调试。

4、在appium会话启动的页面配置desired capbilities相关参数。

 desired capbilities为Appium Client向Appium Server发送的,其内容为一个json格式的键值对。

    platformName : 平台名字,如:ios、android
platformVersion : 对应的平台版本
deviceName : 设备名,手机型号
appPackage : 应用的包名
appActivity : 应用的Activity
automationName : 自动

对于appPackage和appActivity参数如何查找呢?

 

(1) 先找到获取apk信息工具(android SDK的aapt工具)所在的位置;( AndroidSdkuild-tools29.0.3aapt.exe)

(2) 下载支付宝app,记住存放位置;

(3) 打开命令行,输入以下信息:aapt.exe dump badging D:alipay_wap_main.apk(支付宝apk路径)

在输出信息中可以找到‘appPackage’和‘appActivity’的值:

 

 

三、开发步骤

 

1、appium参数配置。

如下图是我的配置:

{
  "platformName": "Android",
  "deviceName": "ALP-AL00",
  "appPackage": "com.eg.android.AlipayGphone",
  "appActivity": "com.eg.android.AlipayGphone.AlipayLogin",
  "noReset": "true",
  "fullReset": "false",
  "automationName": "UiAutomator1"
}


这两个参数的目的是为了避免重新登录,不需要验证各种信息。

 

配置完成后,点击start session即可运行手机支付宝应用。

 

 2、进入支付宝应用后,使用鼠标点击左边支付宝界面,在右边会展示点击项的信息,需要进入到指定项中时,点击右边上方的Tap进入。

依次点击:

顺序为:进入支付宝 ---> 更多 ---> 蚂蚁森林 ---> 查看多好友 ---> 依次点击进入好友蚂蚁森林主页。在每次点击时都记录应用想的source-id。在代码编辑的时候需要使用。

也可以在页面顶部有个小眼睛,点击小眼睛可以对操作进行代码录制,在录制时,右上角可以选择代码类型,如Java,Python等。

 

 3、Python实现步骤

(1)安装appium包:pip install appium。Python的appium模块需要先打开appium客户端,否则无法使用。

(2)检测有无能量球。如下图,如果页面上有能量球时,页面上classname(android.widget.Button)的数量大于5,并且在能量球的text中包含“能量”字样。不可收取的能量球是不包含“能量”这两个字的。所以根据classname的数量和text中是否包含“能量”二字就可以判断是否有可收取的能量球。

为什么要classname的数量要大于5呢?因为页面上基本的按钮有五个,比如:成就、浇水、弹幕等。

 

 代码如下:

    items = driver.find_elements_by_class_name("android.widget.Button")
        if len(items)>5:
            for i in items:
                if "能量" in i.text:
                    print("收取{0}的{1}".format(name,i.text.replace("收集","")))
                    i.click()
            #driver.find_elements_by_class_name("android.widget.Image")[1].click()
            time.sleep(0.5)

 

(3)在收取第一个好友的能量后,需要接着进入第二个好友的主页,此时采取的方式是将页面向上滑动约一个好友框的高度。


        start_x = 500  
        start_y = 1910
        distance = 195  # 约一个框的高度
        driver.swipe(start_x, start_y, start_x, start_y - distance)    # 向上滑动一个框的高度   # driver.swipe(分别表示滑动的起始和终点位置的 x/y 坐标)

 

(4)避免漏掉部分能量未到时间的好友,可返回到顶端重新检测。

        name = driver.find_element_by_id("com.alipay.mobile.nebula:id/h5_tv_title").text
        if name=="某某某的蚂蚁森林": #填写最后一个好友昵称
            driver.tap([(50, 130), (70, 150)], 100) #返回周排行榜主页( <蚂蚁森林 )    driver.tap(x坐标,y坐标,t(ms))
            time.sleep(1)
            driver.tap([(50, 130), (70, 150)], 100) #返回蚂蚁森林主页
            Swipe(driver)    # 查看更多好友
            continue

(4)全部代码如下:参照微信公众号“裸睡的猪”

from appium import webdriver
import timefrom appium.webdriver.common.touch_action import TouchAction

desired_caps = {
                "platformName": "Android",
                "deviceName": "MHA_AL00",
                "appPackage": "com.eg.android.AlipayGphone",
                "appActivity": "AlipayLogin",
                "noReset": "true",
                "fullReset": "false",
                "automationName": "UiAutomator1"
}

server = "http://localhost:4723/wd/hub"
driver = webdriver.Remote(server, desired_caps)
time.sleep(2)
driver.find_element_by_id("com.alipay.android.phone.openplatform:id/more_app_icon").click() #点击更多
time.sleep(2)
driver.find_element_by_id("com.alipay.android.phone.wallet.homemarket:id/app_group_item_icon").click() #点击蚂蚁森林
time.sleep(2)

def Swipe(driver):
    n=0
    while n<=5:
        start_x = 500
        start_y = 1500
        distance = 1000
        driver.swipe(start_x, start_y, start_x, start_y - distance)
        n=n+1
    driver.find_element_by_xpath("//*[@text="查看更多好友"]").click() #点击查看更多好友
    time.sleep(1)

def run(driver):
    Swipe(driver)
    while True:
        TouchAction(driver).press(x=150, y=700).release().perform() #第一个蚂蚁好友框框的坐标
        time.sleep(0.5)

        name = driver.find_element_by_id("com.alipay.mobile.nebula:id/h5_tv_title").text
        if name=="": #填写最后一个好友昵称
            driver.tap([(50, 130), (70, 150)], 100) #返回周排行榜主页( <蚂蚁森林 )    driver.tap(x坐标,y坐标,t(ms))
            time.sleep(1)
            driver.tap([(50, 130), (70, 150)], 100) #返回蚂蚁森林主页
            Swipe(driver)
            continue
        print("正在查看{0}".format(name))
        items = driver.find_elements_by_class_name("android.widget.Button")
        if len(items)>5:
            for i in items:
                if "能量" in i.text:
                    print("收取{0}的{1}".format(name,i.text.replace("收集","")))
                    i.click()

            time.sleep(0.5)
            driver.tap([(50, 130), (70, 150)], 100)
            time.sleep(0.1)      

        start_x = 500  
        start_y = 1910
        distance = 195  # 一个框的高度
        driver.swipe(start_x, start_y, start_x, start_y - distance)    # 向上滑动一个框的高度   # driver.swipe(分别表示滑动的起始和终点位置的 x/y 坐标)

        time.sleep(0.2)

if __name__ == "__main__":
    run(driver)

注:在收取能量的时候,每次都是进入第一个好友的蚂蚁主页,代码始终走不到向上滑动的部分,然而在debug时就可以走到,之后sleep了2s后就可以正常进入。所以在调试过程中,如果遇到无法继续到下一步,可适当的加上sleep。

 


推荐阅读
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 深入解析 Android 选择器与形状绘制技术
    本文深入探讨了 Android 中选择器(Selector)与形状绘制(Shape Drawing)技术的应用与实现。重点分析了 `Selector` 的 `item` 元素,其中包括 `android:drawable` 属性的使用方法及其在不同状态下的表现。此外,还详细介绍了如何通过 XML 定义复杂的形状和渐变效果,以提升 UI 设计的灵活性和美观性。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 汽车电子架构与CAN网络基础解析——鉴源实验室专业解读 ... [详细]
author-avatar
开卷_汤娅造_673
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有