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

原創(chuàng)文章勋锤,歡迎轉(zhuǎn)載。轉(zhuǎn)載請注明:轉(zhuǎn)載自IT人故事會驮配,謝謝用押!
原文鏈接地址:「docker實戰(zhàn)篇」python的docker-抖音appium模擬滑動操作(22)

上次代碼寫到了可以通過接口獲取粉絲的數(shù)據(jù)了,但是當時有個問題报慕,需要人為的手動進行點擊頭像深浮,然后點擊粉絲,進入粉絲列表眠冈,然后在下拉刷新獲取最新的粉絲飞苇。之前都說過appium模擬器可以幫咱們做這些事,下面通過appium來進行操作吧蜗顽。源碼:https://github.com/limingios/dockerpython.git (douyin)

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

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

2.完全進去后雇盖,左上角有個放大鏡的窗口忿等,點擊搜索框,輸入抖音ID(191433445)

3.點擊用戶的標簽崔挖,點擊頭像贸街,在點擊進入“陳赫” 前庵寞,先看看關(guān)注的標簽是否存在

4.進入“陳赫”頁面后,點擊粉絲薛匪,然后進行模擬滑動捐川,通過上節(jié)的實際使用的(mitmdump)解析粉絲數(shù)據(jù)存入數(shù)據(jù)庫中。

編寫python的腳本通過appium操作抖音(二)

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

2.下載抖音apk

http://acj3.pc6.com/pc6_soure/2019-2/com.ss.android.ugc.aweme_500.apk

3.查看抖音apk的信息

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

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

用另一個變態(tài)的方式

#獲取列表
adb devices
#進入監(jiān)控日志
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.獲取安卓的版本號

打開模擬器娇跟,進入關(guān)于手機查看android的版本4.4.2

4.測試配置

1.啟動安卓模擬器
2.啟動appium應(yīng)用
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.關(guān)閉上邊測試用的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.搜索結(jié)果頁面滤港,點擊【用戶】廊蜒,點擊【頭像】,進入【用戶信息界面】溅漾。

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代碼的編寫

按照上邊的業(yè)務(wù)邏輯開始代碼的編寫

#!/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("http://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("http://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("http://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("http://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("http://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("http://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("http://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("http://android.widget.TextView[@text='用戶']")):
    driver.find_element_by_xpath("http://android.widget.TextView[@text='用戶']").click()
#點擊頭像
if WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath("http://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("http://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("http://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("http://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:因用的是模擬器添履,導(dǎo)致電腦很卡屁倔,如果是真機就好些了,開啟usb調(diào)試暮胧,通過adb devices锐借,查看真機的名稱问麸,然后修改python的代碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钞翔,一起剝皮案震驚了整個濱河市口叙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嗅战,老刑警劉巖妄田,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驮捍,居然都是意外死亡疟呐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門东且,熙熙樓的掌柜王于貴愁眉苦臉地迎上來启具,“玉大人,你說我怎么就攤上這事珊泳÷撤耄” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵色查,是天一觀的道長薯演。 經(jīng)常有香客問我,道長秧了,這世上最難降的妖魔是什么跨扮? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮验毡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘璃氢。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挨稿,像睡著了一般奶甘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钉赁,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天讳苦,我揣著相機與錄音膝藕,去河邊找鬼懒棉。 笑死,一個胖子當著我的面吹牛逛绵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼埃仪!你這毒婦竟也來了么库?” 一聲冷哼從身側(cè)響起廊散,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胁澳,沒想到半個月后蔓搞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锦庸,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡扬卷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片财岔。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布磺芭,位于F島的核電站放棒,受9級特大地震影響厢破,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摩泪,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一笆焰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧见坑,春花似錦嚷掠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至熊楼,卻和暖如春霹娄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鲫骗。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工项棠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挎峦。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓香追,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坦胶。 傳聞我的和親對象是個殘疾皇子透典,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容