利用APPium獲取自動瀏覽獲取喵幣

618到了,淘寶和支付寶都有瀏覽任務,簡單寫個Python腳本自動做瀏覽任務,就不用了一個一個的點,代碼主要通過APPium+Python寫成,有可能有些xpath路徑更新,獲取不到節點,請自行測試。

代碼:

# -*- coding: utf-8 -*-
"""
Created on Sat May 30 21:41:43 2020

@author: 14504
"""


from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver . common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from appium.webdriver.common.touch_action import TouchAction
import time
import re


desired_caps={
  "platformName": "Android",
  "deviceName": "Redmi_K20",
  "appPackage": "com.taobao.taobao",
  "appActivity": "com.taobao.tao.TBMainActivity",
  "skipServerInstallation": "True",
  "skipDeviceInitialization": "True",
  "noReset": "True"
}
server = 'http://localhost:4723/wd/hub'
driver = webdriver.Remote (server, desired_caps)
wait = WebDriverWait(driver, 20)

def TBtask(view):
    try:
        viewPath='//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[7]/android.view.View/android.view.View/android.view.View[1]/android.widget.ListView/android.view.View[{}]/android.widget.Button'.format(view)
        messagePath='//com.uc.webview.export.WebView[@content-desc="WVUCWebView"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[7]/android.view.View/android.view.View/android.view.View[1]/android.widget.ListView/android.view.View[{}]/android.view.View'.format(view)
        message=wait.until(EC.presence_of_element_located((By.XPATH,messagePath)))    
        text=re.search('\((.*?)/(.*?)\)', message.text)
        first=int(text.group(1))
        two=int(text.group(2))

        
        while(first < two) :
            print('task{}需要瀏覽{}次,正在瀏覽第{}次......'.format(view,two,first+1))            
            task=wait.until(EC.presence_of_element_located((By.XPATH,viewPath)))
            task.click()
            first_test=first
            time.sleep(27)
            print('15s瀏覽結束,正在返回')
            driver.keyevent(4)
            time.sleep(2)
            message=wait.until(EC.presence_of_element_located((By.XPATH,messagePath)))    
            text=re.search('\((.*?)/(.*?)\)', message.text)
            first=int(text.group(1))
            two=int(text.group(2))
            if(first==first_test):
                print('此任務不是瀏覽任務,進行下一個任務')
                break
        
        print('task{}瀏覽任務完成'.format(view))
            
    except TimeoutException:
        print('task{}請求超時,進行下一個任務'.format(view))
    

def TBmiaobi():
    print('淘寶瀏覽任務開始.......')      
    try:
        lieche = wait.until(EC.presence_of_element_located((By.XPATH,"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.support.v7.widget.RecyclerView/android.widget.FrameLayout[6]/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[4]")))
        lieche.click()
        time.sleep(7)
        TouchAction(driver).tap(x=508, y=1541).perform()
        getMiaoBi= wait.until(EC.presence_of_element_located((By.XPATH,'//com.uc.webview.export.WebView[@content-desc=\"WVUCWebView\"]/com.uc.webkit.ay/android.webkit.WebView/android.view.View/android.view.View/android.view.View/android.view.View/android.view.View[3]/android.view.View/android.view.View[4]/android.widget.Button')))
        getMiaoBi.click()              
        for view in range(2,7):
            if(view != 4):
                TBtask(view)


        
        print('淘寶所有瀏覽任務已基本完成,還有沒完成的,請重新開始')
       
    except TimeoutException :
        print('淘寶瀏覽任務超時,程序結束.......')
    

def ZFBtask():
    i=1
    while(i<=5):
        print('瀏覽第{}次.....'.format(i))
        try:
            el1 =wait.until(EC.presence_of_element_located((By.XPATH,"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout/com.uc.webview.export.WebView/com.uc.webkit.az/android.webkit.WebView/android.view.View/android.view.View[3]/android.view.View/android.app.Dialog/android.view.View[2]/android.view.View[4]/android.view.View[2]/android.view.View/android.widget.Button")))
            #el1 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout/com.uc.webview.export.WebView/com.uc.webkit.az/android.webkit.WebView/android.view.View/android.view.View[3]/android.view.View/android.app.Dialog/android.view.View[2]/android.view.View[5]/android.view.View[2]/android.view.View/android.widget.Button")
            el1.click()
            time.sleep(5)
            driver.keyevent(4)
            el2 =wait.until(EC.presence_of_element_located((By.XPATH,"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout/com.uc.webview.export.WebView/com.uc.webkit.az/android.webkit.WebView/android.view.View/android.view.View[1]/android.app.Dialog/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button[1]")))
            #el2 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout/com.uc.webview.export.WebView/com.uc.webkit.az/android.webkit.WebView/android.view.View/android.view.View[1]/android.app.Dialog/android.view.View/android.view.View/android.view.View/android.view.View/android.widget.Button[1]")
            el2.click()
            i=i+1
        except TimeoutException:
            print('請求超時,任務可能已完成,退出程序')
            break
        
    print('支付寶瀏覽任務完成')
    

def ZFBmiaobi():
    print('支付瀏覽任務開始.......')
    try:      
        driver.start_activity('com.eg.android.AlipayGphone','.AlipayLogin')
        time.sleep(4)
        TouchAction(driver).tap(x=525, y=661).perform()
        time.sleep(5)
        TouchAction(driver).tap(x=646, y=1488).perform()
        getMiaoBi= wait.until(EC.presence_of_element_located((By.XPATH,'/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.RelativeLayout/android.widget.RelativeLayout/android.widget.FrameLayout/com.uc.webview.export.WebView/com.uc.webkit.az/android.webkit.WebView/android.view.View[1]/android.view.View/android.view.View[4]/android.widget.Button')))
        getMiaoBi.click()
        
    except TimeoutException:
            print('請求超時,退出程序')
    
    else:
        ZFBtask()
    
    

def main():
    TBmiaobi()
    print('\n')
    ZFBmiaobi()    

if __name__=='__main__':
    main()


 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章