python模拟支付宝蚂蚁森林的能量产生过程_Python+appium自动化实例(一):使用Python3+appium实现自动收取支付宝蚂蚁森林能量...

一、环境搭建

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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:\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 initems:if '能量' ini.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 = 1910distance = 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').textif 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 importwebdriverimporttimefrom appium.webdriver.common.touch_action importTouchAction

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)defSwipe(driver):

n=0while n<=5:

start_x= 500start_y= 1500distance= 1000driver.swipe(start_x, start_y, start_x, start_y-distance)

n=n+1driver.find_element_by_xpath("//*[@text='查看更多好友']").click() #点击查看更多好友

time.sleep(1)defrun(driver):

Swipe(driver)whileTrue:

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').textif 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 initems:if '能量' ini.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 = 1910distance= 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。

扫码关注我们

微信号:SRE实战

拒绝背锅 运筹帷幄

×

选择打赏方式:

微信

QQ钱包

支付宝

打赏

打赏

打赏

多少都是心意!谢谢大家!!!

×

选择分享方式:

微信扫一扫,分享朋友圈

Or

手机扫一扫,精彩随身带

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是启动Appium Server的Python代码: ``` from appium import webdriver def start_appium_server(): desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '9.0' desired_caps['deviceName'] = 'Pixel 2 XL' desired_caps['app'] = '/path/to/your/app.apk' desired_caps['appPackage'] = 'com.example.app' desired_caps['appActivity'] = '.MainActivity' desired_caps['noReset'] = True driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) if __name__ == '__main__': start_appium_server() ``` 在这段代码中,我们定义了一个名为`start_appium_server`的函数,该函数用于启动Appium Server。在函数内,我们通过设置`desired_caps`字典中的一系列参数,指定了客户端连接Appium Server所需的一些信息,例如:手机系统版本、设备名称、测试应用程序等。 最后,我们通过调用`webdriver.Remote`函数,创建一个WebDriver实例,并将其连接到本地的Appium Server。 希望对你有所帮助。 ### 回答2: 以下是用Python启动Appium Server的示例代码: ```python import os import subprocess import time # 检查Appium Server是否已经在运行 def is_appium_running(): cmd = "lsof -i :4723" result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output = result.stdout.read() if "node" in str(output): return True else: return False # 启动Appium Server def start_appium_server(): if not is_appium_running(): cmd = "appium &" os.system(cmd) time.sleep(10) # 等待10秒,确保Appium Server已经完全启动 if is_appium_running(): print("Appium Server已经成功启动!") else: print("无法启动Appium Server!") else: print("Appium Server已经在运行!") # 停止Appium Server def stop_appium_server(): if is_appium_running(): cmd = "killall node" os.system(cmd) time.sleep(5) # 等待5秒,确保Appium Server已经完全停止 if not is_appium_running(): print("Appium Server已经成功停止!") else: print("无法停止Appium Server!") else: print("Appium Server没有在运行!") # 示例代码使用 start_appium_server() # 在这里可以进行自动化测试 # ... stop_appium_server() ``` 以上代码主要包含两个功能函数:`start_appium_server()`和`stop_appium_server()`。`start_appium_server()`函数用于启动Appium Server,首先会检查Appium Server是否已经在运行,如果没有在运行,则执行启动Appium Server的命令,并等待10秒钟确保它完全启动。最后,检查Appium Server是否成功启动。`stop_appium_server()`函数用于停止Appium Server,首先会检查Appium Server是否在运行,如果在运行,则执行停止Appium Server的命令,并等待5秒钟确保它完全停止。最后,检查Appium Server是否成功停止。 示例代码中的`start_appium_server()`和`stop_appium_server()`函数分别在测试之前和之后调用,你可以将自己的自动化测试代码放入这两个函数之间,以便在连接到Appium Server后进行自动化测试。 ### 回答3: 在Python中启动Appium Server可以使用Python的subprocess模块来执行命令行操作。下面是一个示例代码: ```python import subprocess def start_appium_server(): # 在命令行中运行appium命令 cmd = 'appium --address 127.0.0.1 --port 4723 --bootstrap-port 4724 --no-reset --session-override' subprocess.Popen(cmd, shell=True) # 启动Appium Server start_appium_server() ``` 运行以上代码后,会启动一个Appium Server,它将监听本地地址127.0.0.1的端口4723,同时还会启动一个用于Appium和设备通信的bootstrap端口4724。通过这个Server,客户端可以连接并进行自动化测试。 请注意,在执行代码前,确保你已经成功安装了Appium和Node.js,并将appium命令添加到了系统环境变量中。另外,subprocess模块也是Python标准库的一部分,不需要额外安装。 希望这个代码对你有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值