Python教你迅速成爲“螞蟻森林排行榜”第一名

前言

本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

作者:作者鍋g頭/Crossin的編程教室

PS:如有需要Python學習資料的小夥伴可以加點擊下方鏈接自行獲取http://t.cn/A6Zvjdun

最近在家遠程工作,結果作息更混亂了,早上起不來,導致我螞蟻森林能量天天被偷,嚴重影響我沙漠造樹“大業”。

於是我決定用python寫個自動偷能量的程序,每天早上定時偷取好友能量,“稱霸”螞蟻森林。
(本文僅爲自動化測試技術研究,請勿濫用)

環境配置

首先需要安裝配置好appium自動化測試工具。appium是一個開源、跨平臺的測試框架,可以用來測試原生及混合的移動端應用,支持IOS、Android及FirefoxOS平臺。

大致流程:先在官網(appium.io)下載安裝appium,然後安裝Android SDK(我的方法是安裝Android Studio,在它裏面可以安裝Android SDK),最後再安裝JAVA,並配置JAVA_HOME和CLASSPATH兩個參數的環境變量,然後就可以使用appium啦!

使用介紹

安裝appium有兩個目的,一是使用python的appium模塊需要先打開appium客戶端,否則無法使用;二是便於我們查找某個app某個界面的元素,初次打開時如圖所示:
在這裏插入圖片描述
<點擊Start Server v1.8.1>
在這裏插入圖片描述
<點擊搜索圖標>
在這裏插入圖片描述
配置好4個參數,第一個參數是手機操作系統,第二個參數是手機型號,在設置中可以找到,第三、四參數是app的兩個特定值,點擊start session就可以操控手機了。
在這裏插入圖片描述

開發步驟

第一步:appium自動化測試app首先需要找到 ‘appPackage’ 和 ‘appActivity’ 兩個參數

這裏給大家介紹一種通用的找手機app這兩個參數的方法:

  1. 先找到獲取apk信息工具(android SDK的aapt工具)所在的位置;
  2. 下載支付寶app,記住存放位置;
  3. 打開命令行,輸入以下信息
    在這裏插入圖片描述
    <打碼部分是支付寶app所在的位置>

在輸出信息中可以找到

appPackageappActivity的值:

在這裏插入圖片描述
在這裏插入圖片描述
第二步:打開支付寶,模擬點擊,進入螞蟻森林界面

正常情況下,appium操控打開app時,需要配置一下參數:
在這裏插入圖片描述
但是這種配置方式會默認從頭打開app,需要驗證各種信息,而且需要重新登錄,今天教大家如何避免重新登錄,只需添加2個參數就ok:
在這裏插入圖片描述
這樣就會避免重新登錄了。

下面就是模擬點擊元素操作了,找app元素的方法如下:
在這裏插入圖片描述
只需用客戶端appium打開手機APP,然後將鼠標放在需要點擊的部位,在右側就能找到該部位的元素了。然後依次點擊下圖按鈕:

代碼如下:
在這裏插入圖片描述
第三步:依次點擊進入好友螞蟻森林主頁
在這裏插入圖片描述
如圖所示,我需要點擊一次點擊進入每個好友的主頁,我採取的方式是隻點擊進入第一個框所在的座標,然後模擬向上滑動1個框的高度,這樣依次就可以點擊到每個好友了,代碼如下:
在這裏插入圖片描述
需要注意的是,個人的主頁是點不開的,但是不用做相應處理,因爲點不進去就會在當前界面進行檢測,判作無能量球,繼續滑動到下一個。

第四步:檢測有無可收取得能量
在這裏插入圖片描述
經過分析元素,螞蟻森林主頁可以分爲2類情況,第一種是沒有能量球,第二種是有能量球,判斷方法是比較上圖中classname的數量,若大於5則代表有能量球,反之則沒有,代碼如下:
在這裏插入圖片描述
然後再進一步分析能力球能否能收取,很簡單,只需要判斷每個classname的text是否含有“能量”這2個字就ok了,因爲不可收取的能量球不含這兩個字,代碼如下:
在這裏插入圖片描述

完整代碼

from appium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from 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"
}

server = 'http://localhost:4723/wd/hub'
driver = webdriver.Remote(server, desired_caps)
time.sleep(1)
driver.find_element_by_id('com.alipay.android.phone.openplatform:id/more_app_icon').click() #點擊更多
time.sleep(1)
driver.find_element_by_id('com.alipay.android.phone.wallet.homemarket:id/app_group_item_icon').click() #點擊螞蟻森林
time.sleep(1)

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)
        #if is_element_exist('android.widget.Button'):
        name = driver.find_element_by_id('com.alipay.mobile.nebula:id/h5_tv_title').text
        if name=='': #填寫最後一個好友暱稱
            driver.tap([(50, 130), (70, 150)], 100) #返回周排行榜主頁
            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()
            #driver.find_elements_by_class_name('android.widget.Image')[1].click()
            time.sleep(0.5)
            driver.tap([(50, 130), (70, 150)], 100)
        start_x = 500  # 向上滑動一個框的高度
        start_y = 2100
        distance = 200
        driver.swipe(start_x, start_y, start_x,
                     start_y - distance)
        time.sleep(0.5)

if __name__ == '__main__':
    run(driver)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章