zoukankan      html  css  js  c++  java
  • python蚂蚁森林偷能量

    一、配置环境

    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




    转载仅为学习,不会商用。
    欢迎转载原创,附文链接。
  • 相关阅读:
    图论——拓扑排序
    BZOJ 2882 & 后缀数组的傻逼实现
    BZOJ 2626 & KDtree
    Colorado Potato Beetle(CF的某道) & 鬼畜宽搜
    Prime & 反素数plus
    BZOJ 2049 & LCT又一模板
    BZOJ2002 & LCT模板(分块不会搞)
    BZOJ2190 & 欧拉函数
    BZOJ 1053 & 反素数
    POJ2774 & 后缀数组模板题
  • 原文地址:https://www.cnblogs.com/xdd1997/p/13492884.html
Copyright © 2011-2022 走看看