当前位置: 移动技术网 > IT编程>脚本编程>Python > Python+appium自动化实例(一):使用Python3+appium实现自动收取支付宝蚂蚁森林能量

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

2020年03月18日  | 移动技术网IT编程  | 我要评论

flash player 官方下载,月光墨鱼群,天兰天尾货

一、环境搭建

 

1、下载安装appium。在官网 下载appium安装包,并进行安装。

2、安装android sdk。可直接在()中下载。也可先安装 android studio ,然后在android studio 中进行安装。

3、配置环境变量:新增变量名:android_home,对应值为android sdk路径。如:d:\android\sdk。然后找到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工具)所在的位置;( android\sdk\build-tools\29.0.3\aapt.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。

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网