天天看點

Python+appium操作Android手機實作自動化

安裝參考:http://www.python3.vip/tut/auto/appium/01/

其他:https://www.cnblogs.com/king2/p/13683218.html

# 安裝client程式設計庫
pip install appium-python-client

# 安裝Appium Server
Appium-windows-1.15.1.exe

# 安裝JDK
jdk-8u211-windows-x64.exe
添加一個環境變量 JAVA_HOME,指定值為jdk安裝目錄,例如:JAVA_HOME   d:\tools\java\jdk1.8.0_211

# 安裝 Android SDK
androidsdk.zip
需要 配置一下 添加一個 環境變量 ANDROID_HOME ,設定值為sdk包解壓目錄,比如 d:\tools\androidsdk

另外,還推薦大家配置環境變量 PATH ,加入 adb所在目錄, d:\tools\androidsdk\platform-tools\

           

# 打開即将要處理的APP,在指令行輸入以下代碼,擷取APP的appPackage、appActivity

adb shell dumpsys activity recents | find "intent={"
           
import time
from appium import webdriver


desired_caps = {
  'platformName': 'Android', # 被測手機是安卓
  'platformVersion': '7', # 手機安卓版本
  'deviceName': 'xxx', # 裝置名,安卓手機可以随意填寫
  'appPackage': 'com.ss.android.ugc.aweme.lite', # 啟動APP Package名稱 com.jingdong.app.mall  com.ss.android.ugc.aweme.lite
  'appActivity': 'com.ss.android.ugc.aweme.main.MainActivity', # 啟動Activity名稱 .main.MainActivity  com.ss.android.ugc.aweme.main.MainActivity
  'unicodeKeyboard': True, # 使用自帶輸入法,輸入中文時填True
  'resetKeyboard': True, # 執行完程式恢複原來輸入法
  'noReset': True,       # 不要重置App
  'newCommandTimeout': 6000,
  'automationName' : 'UiAutomator2'
  # 'app': r'd:\apk\bili.apk',
}

# 連接配接Appium Server,初始化自動化環境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

# 設定預設等待時間
driver.implicitly_wait(3)

# 如果有`青少年保護`界面,點選`我知道了`
# iknow = driver.find_elements_by_id("text3")
# if iknow:
#     iknow.click()

# 根據id定位來賺錢,點選
print("點選下面的賺錢圖示")
# driver.find_element_by_id("b2s").click() # 或者id是b2x 已成功
driver.tap([(437,1761)]) # 通過坐标點選下面的賺錢圖示,這個啟動快
time.sleep(1)


str = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View/android.view.View[2]/android.view.View[2]/android.view.View/android.view.View[3]'
# 限時任務賺金币是否已領取
received = driver.find_element_by_xpath(str).text
print("限時任務賺金币是否去領取:",received)

# 找文本:限時任務賺金币
# driver.tap([(981,68),(1025,112)],500) # 限時任務賺金币關閉寶箱廣告,右上角隻有一個× c3c3e036-ef80-4ed3-ba0c-275d12dde83b
# gold_time = driver.find_element_by_android_uiautomator('new UiSelector().text("限時任務賺金币")')
if received == "去領取":
    print("準備去領取限時任務金币")
    driver.find_element_by_android_uiautomator('new UiSelector().text("限時任務賺金币")').click()
    time.sleep(1)
    for _ in range(10):
        time.sleep(5)
        try:
            close_gold_time = driver.find_element_by_android_uiautomator('new UiSelector().text("關閉廣告")')
            print("close_gold_time:",close_gold_time)
            if close_gold_time:
                close_gold_time.click()
                break
        except:
            pass


time.sleep(2)
# 找文本:開寶箱得金币xpath方法
open_box_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View/android.view.View[3]/android.widget.Image'
open_box_text = driver.find_element_by_xpath(open_box_xpath).text
# 找文本:開寶箱得金币text方法
open_box = driver.find_element_by_android_uiautomator('new UiSelector().text("開寶箱得金币")')
print("點選:%s:"%open_box_text)

# driver.tap([(817,63)],500) # 開寶箱關閉廣告

if open_box:
    open_box.click()
    print("開寶箱得金币已點選")
    time.sleep(0.5)
    # 會彈出看廣告視訊再賺306金币的視窗
    open_adv_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.RelativeLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[2]/android.view.View[2]/android.view.View/android.view.View/android.view.View/android.view.View[3]/android.view.View[1]'
    open_adv = driver.find_element_by_xpath(open_adv_xpath)
    open_adv_text = open_adv.text # 看廣告視訊再賺
    time.sleep(0.5)
    print("點選:%s"%open_adv_text)
    open_adv_text = open_adv.click()
    for _ in range(10):
        time.sleep(5)
        try:
            close_box = driver.find_element_by_android_uiautomator('new UiSelector().text("關閉廣告")')
            print("close_box:",close_box)
            if close_box:
                print("關閉開寶箱得金币廣告的×")
                close_box.click()
                break
        except:
            pass

# driver.back()
input('**** Press to quit..')
driver.quit()
           

繼續閱讀