「docker實戰篇」python的docker-抖音appium模擬滑動操做(22)

原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
原文連接地址:「docker實戰篇」python的docker-抖音appium模擬滑動操做(22)python

上次代碼寫到了能夠經過接口獲取粉絲的數據了,可是當時有個問題,須要人爲的手動進行點擊頭像,而後點擊粉絲,進入粉絲列表,而後在下拉刷新獲取最新的粉絲。以前都說過appium模擬器能夠幫我們作這些事,下面經過appium來進行操做吧。源碼:github.com/limingios/d… (douyin)android


抖音短視頻的操做步驟(一)

1.首先經過模擬器打開抖音,等待加載完畢。ios



2.徹底進去後,左上角有個放大鏡的窗口,點擊搜索框,輸入抖音ID(191433445)git



3.點擊用戶的標籤,點擊頭像,在點擊進入「陳赫」 前,先看看關注的標籤是否存在github


4.進入「陳赫」頁面後,點擊粉絲,而後進行模擬滑動,經過上節的實際使用的(mitmdump)解析粉絲數據存入數據庫中。web



編寫python的腳本經過appium操做抖音(二)

  • 準備工做
    1.取消模擬器代理

2.下載抖音apkdocker

acj3.pc6.com/pc6_soure/2…數據庫


3.查看抖音apk的信息bash

查看appPackage和appActivity
1.進入安卓sdk目錄下找到build-tools
2.隨便選擇一個版本號
3.經過cmd進入這個目錄
4.輸入命令獲取aapt.exe dump badging 包名(必須在sdk的build-tools的版本的版本號的 aapt.exe目錄下執行)app





只能獲取appPackage=com.ss.android.ugc.aweme,appActivity獲取不到

用另外一個變態的方式

#獲取列表
adb devices
#進入監控日誌
adb -s 127.0.0.1:62025 logcat>E:/log.txt
#啓動後,點開抖音,而後查看E盤目錄下的log.txt文件
複製代碼

搜Displayed


獲取到信息
appPackage: com.ss.android.ugc.aweme
appActivity:com.ss.android.ugc.aweme.main.MainActivity

3.獲取安卓的版本號

打開模擬器,進入關於手機查看android的版本4.4.2


4.測試配置

1.啓動安卓模擬器
2.啓動appium應用
3.啓動測試的python代碼
4.順序必須上找上邊的


測試的python代碼

#!/usr/bin/env python

import time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
cap = {
  "platformName": "Android",
  "platformVersion": "4.4.2",
  "deviceName": "127.0.0.1:62001",
  "appPackage": "com.ss.android.ugc.aweme",
  "appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
  "noReset": True,
  "unicodeKeyboard":True,
  "resetkeyboard":True
}

driver = webdriver.Remote("http://localhost:4723/wd/hub",cap)

def get_size():
    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    return(x,y)
複製代碼

開始解析頁面的xpath信息(三)

1.關閉上邊測試用的appium,單獨啓動下抖音app


2.暫停播放,啓動uiautomatorviewer。源碼包中有增強版的uiautomatorviewer。看過以前文章的老鐵都懂。必定要暫停,不然uiautomatorviewer。


還須要感嘆一句的是,一天時間抖音app升級了,昨天寫一半的文章,今天在看【搜索】按鈕換到了右邊,沒事,只要頁面有【搜索】按鈕就能夠了。


搜索按鈕的xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]
複製代碼

3.進入搜索頁面後,須要先點擊搜索框,若是框中存在「191433445」,直接點擊,不存在須要在搜索框中輸入「191433445」,而後點擊右邊的搜索按鈕


  1. 輸入框紅色的xpath
//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]
複製代碼

  1. 黃色的xpath
//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]
複製代碼

3.紫色部分搜索按鈕xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]
複製代碼

3.搜索結果頁面,點擊【用戶】,點擊【頭像】,進入【用戶信息界面】。



1.用戶xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.support.v7.app.ActionBar$Tab[3]/android.widget.LinearLayout[1]/android.widget.TextView[1]
複製代碼

2.用戶xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]
複製代碼

4.進入【用戶信息界面】,點擊紅色粉絲這個位置。進入粉絲列表


1.粉絲xpath

//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]
複製代碼

python代碼的編寫

按照上邊的業務邏輯開始代碼的編寫

#!/usr/bin/env python

import time
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
cap = {
  "platformName": "Android",
  "platformVersion": "4.4.2",
  "deviceName": "127.0.0.1:62001",
  "appPackage": "com.ss.android.ugc.aweme",
  "appActivity": "com.ss.android.ugc.aweme.main.MainActivity",
  "noReset": True,
  "unicodeKeyboard":True,
  "resetkeyboard":True
}

driver = webdriver.Remote("http://localhost:4723/wd/hub",cap)

def get_size():
    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    return(x,y)


try:
    #點擊搜索
    print('點擊搜索')
    if WebDriverWait(driver,60).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]")):
        driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.TabHost[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ImageView[1]").click()
except:
    #[26,76][115,165]
    driver.tap([(26,76),(115,165)],500)
#定位搜索框
if WebDriverWait(driver,60).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]")):
    #獲取douyin_id進行搜索
    driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]").send_keys('191433445')
    while driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]").text != '191433445':
        driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[2]/android.widget.EditText[1]").send_keys('191433445')
        time.sleep(0.1)
#點擊搜索
driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.TextView[1]").click()


#點擊用戶標籤
if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//android.widget.TextView[@text='用戶']")):
    driver.find_element_by_xpath("//android.widget.TextView[@text='用戶']").click()
#點擊頭像
if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]")):
    driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[2]/android.view.View[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.ImageView[1]").click()
#點擊粉絲按鈕
if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]")):
    driver.find_element_by_xpath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.widget.HorizontalScrollView[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[5]/android.widget.LinearLayout[3]/android.widget.TextView[2]").click()


    x1 = int(driver.get_window_size()['width']*0.5)
    y1 = int(driver.get_window_size()['height']*0.75)
    y2 = int(driver.get_window_size()['height']*0.25)
    while True:
        if '沒有更多了' in driver.page_source:
            break
        driver.swipe(x1,y1,x1,y2)
        time.sleep(0.5)
複製代碼

PS:因用的是模擬器,致使電腦很卡,若是是真機就好些了,開啓usb調試,經過adb devices,查看真機的名稱,而後修改python的代碼。

相關文章
相關標籤/搜索