参考:
配置JAVA_HOME:https://www.cnblogs.com/liuhongfeng/p/4177568.html
Python+appium自动化实例(一):使用Python3+appium实现自动收取支付宝蚂蚁森林能量
一、配置环境
1.下载Android Studio
1.1 下载链接1:官网(需要能访问YouTuBe的网络)
下载链接2:百度云(较慢) 提取码:0622
1.2 下载后正常安装即可,安装后打开Android Studio ,如下图安装几个版本(我的手机是安卓9)
1.3 系统变量的配置
- 复制上图的Android SDK locatiom后面的地址
- win+E,打开文件资源管理器 → 此电脑 → 右键→属性→高级系统设置→高级→环境变量→在下面的系统变量点击新建→变量名:ANDROID_HOME→变量值:上一步复制到的地址→确定
- 在系统变量中找到变量Path→编辑→新建→输入:%ANDROID_HOME%platform-tools,再新建→输入:%ANDROID_HOME% ools
1.4 退出Android Studio
2. 配置jdk_home环境
参考链接:https://www.cnblogs.com/liuhongfeng/p/4177568.html
3. 配置Appium
3.1 打开手机开发者模式(我的是小米6X)
- 设置→我的设备→全部参数→快速点击MIUI版本后面的文字10次左右,可打开开发者模式
- 设置→更多设置→开发者选项→开启开发者选项,开启USB调试,开启USB安装
3.2 安装
下载链接:http://appium.io/(下载.exe)
之后操作参照Python+appium自动化实例(一):使用Python3+appium实现自动收取支付宝蚂蚁森林能量
下面的 注 列了可能出现的错误的解决方法
注1:打开appium之前先配置文件
Edit Configurations-->填写两个环境
注2:对其中一步进行详解 打开命令行,输入以下信息:aapt.exe dump badging D:alipay_wap_main.apk(支付宝apk路径)
首先找到aapt.exe的路径,我的是:C:UsersxddAppDataLocalAndroidSdkuild-tools30.0.1
然后:win+r,输入cmd,回车
输入 cd C:UsersxddAppDataLocalAndroidSdkuild-tools30.0.1 ,回车
输入 aapt.exe dump badging "D:alialipay_2088131876115982_246.apk" ,回车
或者将apk文件放入aapt.exe目录下,采用 aapt dump badging Coolapk-10.5.3-2009271_sign.apk
注3:如果系统找不到appium模块
pip install Appium-Python-Client
# edit by xdd # Before running this script, open appium.exe,and start server # Reference site:https://www.cnblogs.com/deliaries/archive/2020/03/18/12410835.html import time from tkinter.messagebox import * from appium import webdriver from appium.webdriver.common.touch_action import TouchAction start = time.perf_counter() # 计算程序运行时间 ''' 打开支付宝 ''' desired_caps = { "platformName": "Android", "deviceName": "MI 6X", "appPackage": "com.eg.android.AlipayGphone", "appActivity": "com.eg.android.AlipayGphone.AlipayLogin", "noReset": "true", "fullReset": "false", "automationName": "UiAutomator1" } server = 'http://localhost:4723/wd/hub' driver = webdriver.Remote(server, desired_caps) time.sleep(5) TouchAction(driver).press(x=544, y=706).release().perform() # 蚂蚁森林的图标位置,我的在首页,不在的话,要先打开更多 print('正在打开蚂蚁森林') # 点击蚂蚁森林(以id打开,这种较好,但是appium有些故障,刷新不出来 # driver.find_element_by_id('com.alipay.android.phone.wallet.homemarket:id/app_group_item_icon').click() time.sleep(5) ''' 向下滑,找到更多好友,点击 ''' 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) ''' ----------- 进入偷能量界面 ---------- ''' while True: TouchAction(driver).press(x=345, y=668).release().perform() # 第一个蚂蚁好友框框的坐标,随着滑动,每一个好友都会出现在这个坐标点 # time.sleep(0.5) name = driver.find_element_by_id('com.alipay.mobile.nebula:id/h5_tv_title').text print(name) if name=='陈欣的蚂蚁森林': # 填写最后一个好友昵称,程序不会遍历到最后一个,因为到最后的时候,界面不能滑动;可先填最后一个,看能遍历到哪一个好友,再修改即可. end = time.perf_counter() tim = end - start txtshow = '偷能量完成,运行这段代码用时:{:.6f}秒'.format(tim) print(txtshow) showinfo(title='提示', message=txtshow) break 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: if ('能量' in i.text) | ('消失' in i.text): print('收取{0}的{1}'.format(name,i.text.replace('收集',''))) i.click() time.sleep(0.1) 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.5) # 系统反应也需要时间,此处sleep()不可省略
1. 关于环境配置有更简单的方法,可以不要安装 Android Studio
2.更新了程序 2021-07-22 【愿晴日朗照,人间皆安!】
import time import winsound from appium import webdriver from appium.webdriver.common.touch_action import TouchAction desired_caps = { "platformName": "Android", "platformVersion": "11.0", "deviceName": "b75d23ef", "appPackage": "com.eg.android.AlipayGphone", "appActivity": "com.eg.android.AlipayGphone.AlipayLogin", "noReset": "true", "fullReset": "false", "automationName": "UiAutomator2" } server = 'http://127.0.0.1:4723/wd/hub' driver = webdriver.Remote(server, desired_caps) time.sleep(5) driver.find_element_by_xpath("//*[@text='蚂蚁森林']").click() # 点击蚂蚁森林按钮 time.sleep(2) def Get_some_coord(): phone_X = driver.get_window_size()['width'] # 手机宽 phone_Y = driver.get_window_size()['height'] # 手机高 clickBlockXmin = int((108/1080) * phone_X) # 模拟点击矩形区域的xmin clickBlockXmax = int((900/1080) * phone_X) # 模拟点击矩形区域的xmax clickBlockYmin = int((700/2400) * phone_Y) clickBlockYmax = int((800/2400) * phone_Y) SouYiSou_X = int((1000/1080) * phone_X) # "搜一搜"图标的X坐标 SouYiSou_Y = int((1600 / 2400) * phone_Y) coord_List = [clickBlockXmin,clickBlockXmax,clickBlockYmin,clickBlockYmax,SouYiSou_X,SouYiSou_Y] return coord_List # python函数先定义后调用 def Click_click_click(coord_List): for ii in range(coord_List[0],coord_List[1],80): for jj in range(coord_List[2],coord_List[3],80): time.sleep(0.001) TouchAction(driver).press(x=ii, y=jj).release().perform() # 点击 try: driver.find_element_by_xpath("//*[@text='关闭']").click() # 关闭可能出现的弹窗 except: pass print('正在收取自己的能量') coord_List = Get_some_coord() Click_click_click(coord_List) # 收自己的能量 TouchAction(driver).press(x=coord_List[4], y=coord_List[5]).release().perform() # 点击"搜一搜" while 1: try: name = driver.find_element_by_id('com.alipay.mobile.nebula:id/h5_tv_title').text print('正在收取{0}的能量'.format(name)) Click_click_click(coord_List) TouchAction(driver).press(x=coord_List[4], y=coord_List[5]).release().perform() # 点击"搜一搜" flag = 0 except: flag = flag + 1 print('第{0}次没有收到能量'.format(flag)) if flag == 2: winsound.Beep(1000, 1000) print('收取完成') break