1. 程式人生 > 實用技巧 >用 Python 實現定時自動化收取螞蟻森林能量

用 Python 實現定時自動化收取螞蟻森林能量

1. 概述

提到螞蟻森林,大家應該都知道,你是否有因忘記收取能量而被好友收取的經歷呢?

如果你不是螞蟻森林重度使用者,被別人收取了能量可能對你來說沒什麼。

但如果你是螞蟻森林重度使用者,遇到能量被偷 ...

本文我們來看一下如何使用 Python + Appium 實現定時自動化收取螞蟻森林能量。

2. 環境

本文主要環境如下:

  • Win7
  • 小米5s
  • Python3.7
  • Appium1.5
  • 支付寶10.2.6.7010

如果對環境搭建不熟悉的話,可以看一下:Python + Appium 自動化操作微信入門我用 Python 找出了刪除我微信的所有人並將他們自動化刪除了

3. 實現

功能實現的基本思路為:

  • 開啟支付寶進入螞蟻森林,收取自己的能量

  • 收取完自己能量後,點選找能量進入好友螞蟻森林,收取好友能量,以此類推

接下來我們看一下主要程式碼實現。

引數配置程式碼實現如下:

desired_caps = {
    "platformName": "Android", # 系統
    "platformVersion": "8.0.0", # 系統版本號
    "deviceName": "m5s", # 裝置名
    "appPackage": "com.eg.android.AlipayGphone", # 包名
    "appActivity": "AlipayLogin", # app 啟動時主 Activity
    'noReset': True # 保留 session 資訊,可以避免重新登入
}

通常大家都會將螞蟻森林放在支付寶首頁,此時我們開啟支付寶後直接點選螞蟻森林選項即可進入。

程式碼實現如下:

driver.find_elements_by_id('com.alipay.android.phone.openplatform:id/home_app_view')[10].click()

進入自己螞蟻森林之後,開始收取自己的能量,因為新版支付寶不能定位能量球元素了,所以我們需要在能量球可能出現的區域實現點選。收取能量的程式碼實現如下:

# 收取能量
def collect_energy(driver):
    print('開始收取能量')
    # 獲取手機螢幕寬高
    width = int(driver.get_window_size()['width'])
    height = int(driver.get_window_size()['height'])
    # 能量球可能出現的區域座標
    start_x = 110
    end_x = 940
    start_y = 460
    end_y = 880
    for i in range(start_y, end_y, 80):
        for j in range(start_x, end_x, 80):
            tap_x1 = int((int(j) / width) * width)
            tap_y1 = int((int(i) / height) * height)
            # 點選指定座標
            driver.tap([(tap_x1, tap_y1), (tap_x1, tap_y1)], 1000)
    print('能量收取完畢')

自己能量收取完畢之後,點選找能量進入好友螞蟻森林繼續收取能量,程式碼實現如下:

# 找能量
def search_energy(driver):
    print('找能量,收取好友能量')
    time.sleep(3)
    # 點選找能量
    driver.tap([(1000, 1520), (1080, 1580)], 1000)
    time.sleep(3)
    # 收取好友能量
    collect_energy(driver)
    time.sleep(3)
    # 收取完畢繼續找能量
    search_energy(driver)

能量收取的功能實現了之後,我們使用定時任務實現定時收取即可,下面看一下定時任務的實現。

定時任務的實現我們使用 apscheduler 元件,使用之前需執行 pip install apscheduler 裝一下。

定時任務的程式碼實現如下:

scheduler = BlockingScheduler()
# collect_main:定時執行的方法
scheduler.add_job(collect_main, 'cron', hour=20, minute=23, second=20)
try:
    scheduler.start()
except (KeyboardInterrupt, SystemExit):
    pass

到此,我們利用 Python + Appium 實現定時自動化收取螞蟻森林能量的工作就完成了。

原始碼在公號 Python小二 後臺回覆 201116 獲取。