今天就跟大家聊聊有關(guān)Python中如何利用appium抓取app應(yīng)用數(shù)據(jù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、安寧網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為安寧等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
什么是selenium?
Selenium原本是一個用于Web應(yīng)用程序自動化測試工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。我們爬蟲工程師使用selenium來抓取動態(tài)web頁面。
今天的Python學(xué)習(xí)教程我們來介紹另一款自動化測試工具,Appium。
Appium官方文檔
https://github.com/DoctorQ/appium/blob/master/docs/en/about-appium/intro.md
什么是Appium?
Appium是一個移動端的自動化框架,可用于測試原生應(yīng)用,移動網(wǎng)頁應(yīng)用和混合型應(yīng)用,且是跨平臺的??捎糜贗OS和Android以及firefox的操作系統(tǒng)。
原生的應(yīng)用是指用android或ios的sdk編寫的應(yīng)用
移動網(wǎng)頁應(yīng)用是指網(wǎng)頁應(yīng)用,類似于ios中safari應(yīng)用或者Chrome應(yīng)用或者類瀏覽器的應(yīng)用。
混合應(yīng)用是指一種包裹webview的應(yīng)用,原生應(yīng)用于網(wǎng)頁內(nèi)容交互性的應(yīng)用。
重要的是Appium是跨平臺的,何為跨平臺,意思就是可以針對不同的平臺用一套api來編寫測試用例。
同樣的Appium原本是一個用于app應(yīng)用自動化測試工具,我們爬蟲工程師也可以利用它,在抓取app應(yīng)用數(shù)據(jù)。
Appium相當于一個服務(wù)器,我們可以向Appium發(fā)送一些操作指令,Appium就會根據(jù)不同的指令對移動設(shè)備進行驅(qū)動,完成不同的動作。
一、本次Python學(xué)習(xí)教程的目的:
我們以Android平臺的手機京東為例來演示Appium啟動和操作App的方法,最終實現(xiàn)抓取手機京東商品數(shù)據(jù)。
二、準備工作
確保PC已經(jīng)安裝好Appium,本實例在windows環(huán)境下安裝,安裝的appium版本為Appium-Desktop
安裝好Android開發(fā)環(huán)境,uiautomatorviewer工具(必須)、python開發(fā)環(huán)境和Python版本的Appium API(Appium-Python-Client)
android模擬器(夜神模擬器)安裝好手機京東app
確保PC上已安裝好mitmproxy抓包工具(必須)、fiddler抓包工具(非必須)
數(shù)據(jù)存儲用數(shù)據(jù)庫為MongoDB
三、獲取Appium-Desktop使用的關(guān)鍵參數(shù)(Desired Capabilities參數(shù))
Desired Capabilities參數(shù):它們分別是platformName、deviceName、appPackage、appActivity。
platformName:它是平臺名稱,需要區(qū)分Android或iOS,我們使用的是android平臺,因此為Android。
deviceName:它是設(shè)備名稱,此處是手機的具體類型,deviceName可以通過adb devices命令獲取。
此處注意:模擬器顯示為127.0.0.1,真實手機與模擬器顯示不同,真實手機為一串字母數(shù)據(jù)結(jié)合
appPackage:它是App程序包名,該參數(shù)可以在adb shell中使用logcat獲取。
命令后回車
隨后,打開android模擬器中的手機京東app
在adb shell中,我們可以獲取到appPackage和appActivity
appActivity:它是入口Activity名,這里通常需要以 . 開頭,該參數(shù)可以在adb shell中使用logcat獲取。
其中:
appPackage為:com.jingdong.app.mall
appActivity為:com.jingdong.app.mall.MainFrameActivity
獲取到Appium-Desktop使用的關(guān)鍵參數(shù)(Desired Capabilities參數(shù))后,我們就可以啟動Appium-Desktop了
四、啟動Appium-Desktop服務(wù)器
確認appium-desktop啟動成功后,我們就可以編寫代碼了
五、編寫app啟動代碼
from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '4.4.2' desired_caps['deviceName'] = '192.168.54.56:62001' desired_caps['appPackage'] = 'com.jingdong.app.mall' desired_caps['appActivity'] = 'com.jingdong.app.mall.MainFrameActivity' desired_caps['unicodeKeyboard'] = True desired_caps['resetKeyboard'] = True #啟動appium-desktop服務(wù)器,服務(wù)器IP根據(jù)實際填寫 driver = webdriver.Remote('http://192.168.54.56:4723/wd/hub', desired_caps)
六、運行代碼啟動app
確認手機京東app啟動成功,并且無報錯后,我們就可以編寫自動化代碼來控制app行為了
如何來定位app內(nèi)部控件節(jié)點呢
答案是使用uiautomatorviewer
通過獲取控件的xpath,我們就可以定位到app控件了
七、編寫自動化代碼
#等待app啟動 time.sleep(5) #關(guān)閉廣告,如果有 close_ad = driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.jingdong.app.mall:id/sq']") if close_ad: close_ad.click() #點擊分類 select_fenlei = driver.find_element_by_xpath("//android.widget.RadioGroup[@resource-id='com.jingdong.app.mall:id/tf']/android.widget.RadioButton[2]").click() #點擊搜索 select_search = driver.find_element_by_xpath("//android.widget.ImageView[@resource-id='com.jingdong.app.mall:id/xo']").click() #輸入關(guān)鍵字 key = '筆記本電腦' #判斷是否輸入文字 while True: if driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.jingdong.app.mall:id/xp']").text != key: select_keyword = driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.jingdong.app.mall:id/xp']").send_keys(key) else: break #點擊搜索 driver.find_element_by_xpath("//android.widget.Button[@resource-id='com.jingdong.app.mall:id/el1']").click() time.sleep(1) start_x = 500 start_y = 900 distance = 800 #模擬手機端滑動 while True: driver.swipe(start_x,start_y,start_x,start_y-distance) time.sleep(0.2) if '抱歉,沒有更多商品啦' in driver.page_source: break
自動化代碼編寫完成之后,運行一下,看是否有問題,如無問題,就可以進行下一步了
八、抓取應(yīng)用數(shù)據(jù)包
這里,我們通過fiddler抓包工具獲取到手機京東的數(shù)據(jù)包
查看response,確實是我們想要的數(shù)據(jù),接下來就可以編寫解析響應(yīng)數(shù)據(jù)代碼了
九、編寫解析響應(yīng)數(shù)據(jù)代碼
import json from save_data import mongo_info def response(flow): if 'client.action?functionId=search&clientVersion=5.3.0' in flow.request.url: response_dict = json.loads(flow.response.text) if 'wareInfo' in response_dict: for i in response_dict['wareInfo']: mongo_info.insert_data(i)
十、編寫數(shù)據(jù)存儲邏輯代碼
import pymongo from pymongo.collection import Collection class Connect_mongo(object): def __init__(self): self.client = pymongo.MongoClient(host='192.168.54.41',port=27017,connect=False) self.db_data = self.client['jingdong'] def insert_data(self,item): collections = Collection(self.db_data,'jingdong_data') collections.insert(item) mongo_info = Connect_mongo()
十一、啟動mitmdump,解析數(shù)據(jù)!
注意:手機或模擬器一定要設(shè)置mitmdump服務(wù)器IP的代理
啟動mitmdump:
mitmdump -p 8889 -s decode_jingdong.py
十二、接下來,啟動自動化控制腳本就可以抓取到數(shù)據(jù)了
python jingdong.py
十三、查看數(shù)據(jù)
看完上述內(nèi)容,你們對Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
標題名稱:Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)
網(wǎng)頁網(wǎng)址:http://www.rwnh.cn/article46/peoieg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、電子商務(wù)、云服務(wù)器、品牌網(wǎng)站制作、品牌網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)