成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

今天就跟大家聊聊有關(guān)Python中如何利用appium抓取app應(yīng)用數(shù)據(jù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)公司專(zhuān)注于企業(yè)全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站重做改版、安寧網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為安寧等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

什么是selenium?

Selenium原本是一個(gè)用于Web應(yīng)用程序自動(dòng)化測(cè)試工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶(hù)在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。我們爬蟲(chóng)工程師使用selenium來(lái)抓取動(dòng)態(tài)web頁(yè)面。

今天的Python學(xué)習(xí)教程我們來(lái)介紹另一款自動(dòng)化測(cè)試工具,Appium。

Appium官方文檔

https://github.com/DoctorQ/appium/blob/master/docs/en/about-appium/intro.md

什么是Appium?

Appium是一個(gè)移動(dòng)端的自動(dòng)化框架,可用于測(cè)試原生應(yīng)用,移動(dòng)網(wǎng)頁(yè)應(yīng)用和混合型應(yīng)用,且是跨平臺(tái)的??捎糜贗OS和Android以及firefox的操作系統(tǒng)。

原生的應(yīng)用是指用android或ios的sdk編寫(xiě)的應(yīng)用

移動(dòng)網(wǎng)頁(yè)應(yīng)用是指網(wǎng)頁(yè)應(yīng)用,類(lèi)似于ios中safari應(yīng)用或者Chrome應(yīng)用或者類(lèi)瀏覽器的應(yīng)用。

混合應(yīng)用是指一種包裹webview的應(yīng)用,原生應(yīng)用于網(wǎng)頁(yè)內(nèi)容交互性的應(yīng)用。

重要的是Appium是跨平臺(tái)的,何為跨平臺(tái),意思就是可以針對(duì)不同的平臺(tái)用一套api來(lái)編寫(xiě)測(cè)試用例。

同樣的Appium原本是一個(gè)用于app應(yīng)用自動(dòng)化測(cè)試工具,我們爬蟲(chóng)工程師也可以利用它,在抓取app應(yīng)用數(shù)據(jù)。

Appium相當(dāng)于一個(gè)服務(wù)器,我們可以向Appium發(fā)送一些操作指令,Appium就會(huì)根據(jù)不同的指令對(duì)移動(dòng)設(shè)備進(jìn)行驅(qū)動(dòng),完成不同的動(dòng)作。

一、本次Python學(xué)習(xí)教程的目的:

我們以Android平臺(tái)的手機(jī)京東為例來(lái)演示Appium啟動(dòng)和操作App的方法,最終實(shí)現(xiàn)抓取手機(jī)京東商品數(shù)據(jù)。

二、準(zhǔn)備工作

確保PC已經(jīng)安裝好Appium,本實(shí)例在windows環(huán)境下安裝,安裝的appium版本為Appium-Desktop

安裝好Android開(kāi)發(fā)環(huán)境,uiautomatorviewer工具(必須)、python開(kāi)發(fā)環(huán)境和Python版本的Appium API(Appium-Python-Client)

android模擬器(夜神模擬器)安裝好手機(jī)京東app

確保PC上已安裝好mitmproxy抓包工具(必須)、fiddler抓包工具(非必須)

數(shù)據(jù)存儲(chǔ)用數(shù)據(jù)庫(kù)為MongoDB

三、獲取Appium-Desktop使用的關(guān)鍵參數(shù)(Desired Capabilities參數(shù))

Desired Capabilities參數(shù):它們分別是platformName、deviceName、appPackage、appActivity。

platformName:它是平臺(tái)名稱(chēng),需要區(qū)分Android或iOS,我們使用的是android平臺(tái),因此為Android。

deviceName:它是設(shè)備名稱(chēng),此處是手機(jī)的具體類(lèi)型,deviceName可以通過(guò)adb devices命令獲取。

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

此處注意:模擬器顯示為127.0.0.1,真實(shí)手機(jī)與模擬器顯示不同,真實(shí)手機(jī)為一串字母數(shù)據(jù)結(jié)合

appPackage:它是App程序包名,該參數(shù)可以在adb shell中使用logcat獲取。

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

命令后回車(chē)

隨后,打開(kāi)android模擬器中的手機(jī)京東app

在adb shell中,我們可以獲取到appPackage和appActivity

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

appActivity:它是入口Activity名,這里通常需要以 . 開(kāi)頭,該參數(shù)可以在adb shell中使用logcat獲取。

其中:

appPackage為:com.jingdong.app.mall

appActivity為:com.jingdong.app.mall.MainFrameActivity

獲取到Appium-Desktop使用的關(guān)鍵參數(shù)(Desired Capabilities參數(shù))后,我們就可以啟動(dòng)Appium-Desktop了

四、啟動(dòng)Appium-Desktop服務(wù)器

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

確認(rèn)appium-desktop啟動(dòng)成功后,我們就可以編寫(xiě)代碼了

五、編寫(xiě)app啟動(dòng)代碼

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
#啟動(dòng)appium-desktop服務(wù)器,服務(wù)器IP根據(jù)實(shí)際填寫(xiě)
driver = webdriver.Remote('http://192.168.54.56:4723/wd/hub', desired_caps)

六、運(yùn)行代碼啟動(dòng)app

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

確認(rèn)手機(jī)京東app啟動(dòng)成功,并且無(wú)報(bào)錯(cuò)后,我們就可以編寫(xiě)自動(dòng)化代碼來(lái)控制app行為了

如何來(lái)定位app內(nèi)部控件節(jié)點(diǎn)呢

答案是使用uiautomatorviewer

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

通過(guò)獲取控件的xpath,我們就可以定位到app控件了

七、編寫(xiě)自動(dòng)化代碼

#等待app啟動(dòng)
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()
#點(diǎn)擊分類(lèi)
select_fenlei = driver.find_element_by_xpath("//android.widget.RadioGroup[@resource-id='com.jingdong.app.mall:id/tf']/android.widget.RadioButton[2]").click()
#點(diǎn)擊搜索
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
#點(diǎn)擊搜索
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
#模擬手機(jī)端滑動(dòng)
while True:
 driver.swipe(start_x,start_y,start_x,start_y-distance)
 time.sleep(0.2)
 if '抱歉,沒(méi)有更多商品啦' in driver.page_source:
 break

自動(dòng)化代碼編寫(xiě)完成之后,運(yùn)行一下,看是否有問(wèn)題,如無(wú)問(wèn)題,就可以進(jìn)行下一步了

八、抓取應(yīng)用數(shù)據(jù)包

這里,我們通過(guò)fiddler抓包工具獲取到手機(jī)京東的數(shù)據(jù)包

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

查看response,確實(shí)是我們想要的數(shù)據(jù),接下來(lái)就可以編寫(xiě)解析響應(yīng)數(shù)據(jù)代碼了

九、編寫(xiě)解析響應(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)

十、編寫(xiě)數(shù)據(jù)存儲(chǔ)邏輯代碼

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()

十一、啟動(dòng)mitmdump,解析數(shù)據(jù)!

注意:手機(jī)或模擬器一定要設(shè)置mitmdump服務(wù)器IP的代理

啟動(dòng)mitmdump:

mitmdump -p 8889 -s decode_jingdong.py

十二、接下來(lái),啟動(dòng)自動(dòng)化控制腳本就可以抓取到數(shù)據(jù)了

python jingdong.py

十三、查看數(shù)據(jù)

Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)

看完上述內(nèi)容,你們對(duì)Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

標(biāo)題名稱(chēng):Python中如何利用appium抓取app應(yīng)用數(shù)據(jù)
網(wǎng)頁(yè)網(wǎng)址:http://jinyejixie.com/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)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
普格县| 铁岭市| 龙州县| 竹溪县| 卫辉市| 巧家县| 乐亭县| 舒城县| 青河县| 怀柔区| 新巴尔虎右旗| 班玛县| 新源县| 容城县| 桂东县| 利辛县| 衡东县| 马山县| 衡东县| 依兰县| 太原市| 山东| 息烽县| 平南县| 余江县| 育儿| 西林县| 长乐市| 安康市| 仙游县| 根河市| 竹溪县| 屏东县| 延寿县| 博白县| 镇原县| 通辽市| 滕州市| 忻城县| 沐川县| 洛川县|