app端的自動(dòng)化,淺談APPium
selenium是web端的自動(dòng)化,appium是app端的自動(dòng)化,它繼承了webdriver(也就是selenium 2)Appium入坑前必看,附爬蟲(chóng)心得Appium入坑前必看,附爬蟲(chóng)心得前言:首先聲明一點(diǎn),在爬任何數(shù)據(jù)的時(shí)候,一定不要先考慮用Appium,個(gè)人建議開(kāi)始爬蟲(chóng)前...
selenium是web端的自動(dòng)化,appium是app端的自動(dòng)化,它繼承了webdriver(也就是selenium 2)
Appium入坑前必看,附爬蟲(chóng)心得
Appium入坑前必看,附爬蟲(chóng)心得
前言:
首先聲明一點(diǎn),在爬任何數(shù)據(jù)的時(shí)候,一定不要先考慮用Appium,
個(gè)人建議開(kāi)始爬蟲(chóng)前正確的做法應(yīng)該是:
1.去百度和谷歌搜下這個(gè)網(wǎng)站有沒(méi)有人分享出你要爬數(shù)據(jù)的API
2.看看電腦網(wǎng)頁(yè)有沒(méi)有你要的數(shù)據(jù),調(diào)查下好不好拿,不管好不好拿,也不要急著就開(kāi)爬
3.看看有沒(méi)有電腦能打開(kāi)的手機(jī)網(wǎng)站,一般格式為http://m.xxx.com或http://mobile.xxxx.com,有的話可以用F12檢查抓下包,看下抓取難易程度
4.看看有沒(méi)有手機(jī)App,抓下App的包,看能不能抓到接口
5.抓下公眾號(hào)和小程序的包,看能不能抓到接口
以上調(diào)查完成后,再去確定你要選擇的爬取方式。
為什么這么說(shuō)呢,你有沒(méi)有遇到過(guò)這種情況,拿著電腦網(wǎng)站就開(kāi)爬,搞了好幾天終于搞定了反爬和加密參數(shù),突然發(fā)現(xiàn)手機(jī)或者小程序能抓到現(xiàn)成的接口?或者突然發(fā)現(xiàn)這個(gè)網(wǎng)站直接有公開(kāi)的接口。
然后你下次就會(huì)按我說(shuō)的做了,哈哈哈。
其次:
Appium不是爬蟲(chóng)工具(封面圖上寫(xiě)的有),而是爬蟲(chóng)輔助工具,大多數(shù)情況下需要和抓包工具配合完成爬蟲(chóng)!?。?/strong>
接下來(lái)說(shuō)下Appium的優(yōu)缺點(diǎn)。雖然有點(diǎn)啰嗦,但是真的有干貨,都是些踩過(guò)的坑,還是希望大家能耐心看完,如果實(shí)在懶得看,就看加粗的黑字就行。
先說(shuō)缺點(diǎn),缺點(diǎn)比較多:
- 慢
- 慢
- 慢
- 慢
- ...
- ...
- ...
- 慢
好了說(shuō)完了。
哈哈哈,其實(shí)Appium也很冤,它是有本事點(diǎn)擊的像光速一樣快的,可是因?yàn)檫B的是硬件,硬件反應(yīng)完它才能進(jìn)行下一步操作,所以硬件性能越好,它越給力,反之,手機(jī)打開(kāi)個(gè)抖音都卡半天,網(wǎng)速一秒10K,讓它給你一分鐘抓幾百上千個(gè)視頻?Appium也是委屈巴巴。
什么?要拿它跟Request,Scrapy比速度?來(lái)來(lái)來(lái),這個(gè)加密參數(shù)來(lái)手寫(xiě)下,這個(gè)反爬來(lái)搞定下,Appium根本不需要考慮加密的問(wèn)題,反爬的話也相對(duì)簡(jiǎn)單,因?yàn)槟闶悄M人滑動(dòng),除非你訪問(wèn)太過(guò)異常,少部分軟件可能會(huì)有些限制。
說(shuō)優(yōu)點(diǎn)之前,先說(shuō)說(shuō)Appium爬蟲(chóng)的思路。
我當(dāng)初之所以選擇用Appium,是因?yàn)槟菚r(shí)候要爬抖音無(wú)水印視頻,抓包后發(fā)現(xiàn)抖音的加密算法太難了,本事有限,暫時(shí)破解不了,網(wǎng)上一時(shí)也沒(méi)找到現(xiàn)成的JS破解代碼。
我又比較懶,偶然發(fā)現(xiàn)一款抓包工具可以執(zhí)行python腳本,所以就想到抓包,我只需要寫(xiě)幾行代碼,讓Appium代替我滑動(dòng)手機(jī),甚至這一步可以跳過(guò),我直接手動(dòng)滑動(dòng),一邊刷抖音的同時(shí),讓手機(jī)自己生成加密后的參數(shù)去請(qǐng)求服務(wù)器,讓抓包工具去執(zhí)行Python腳本,劫持服務(wù)器返回的視頻資源就行了,這樣省時(shí)省力,也不用把大把時(shí)間浪費(fèi)在破解JS身上。
雖然速度沒(méi)有request和Scrapy相比,但是還好Appium支持同時(shí)控制多臺(tái)手機(jī),我當(dāng)時(shí)模擬器三開(kāi),兩天抓了將近50W抖音無(wú)水印視頻。
這也是利用Appium在爬大多數(shù)App的主要思路。
那么以上就是Appium的第一個(gè)優(yōu)點(diǎn),可以盡量少寫(xiě)代碼,避開(kāi)那些頭疼的加密參數(shù)。
不僅是加密參數(shù),如果你需要模擬注冊(cè),需要破解滑動(dòng)驗(yàn)證碼或者短信驗(yàn)證碼,也是可以用Appium并借助第三方打碼平臺(tái)搞定的。
其次因?yàn)槟闶悄M人點(diǎn)擊,而且速度夠慢,這時(shí)候缺點(diǎn)也變成了優(yōu)點(diǎn),那就是基本0反爬,大部分手機(jī)App基本沒(méi)有反爬,當(dāng)然不排除個(gè)別桑心病狂的例外,比如檢測(cè)你訪問(wèn)頻率,禁止你使用抓包工具,以及傳輸數(shù)據(jù)不走h(yuǎn)ttp協(xié)議等。
準(zhǔn)確定位元素位置,類(lèi)似xpath,而不是點(diǎn)擊橫縱坐標(biāo),這樣就算頁(yè)面布局或者手機(jī)型號(hào)或者分辨率改變了,也能準(zhǔn)確的點(diǎn)到相應(yīng)元素。
有些App界面上的信息是可以直接通過(guò)Appium的text()屬性抓到的,比如微信錢(qián)包流水,以前抓過(guò),不知道現(xiàn)在還能不能抓了。
可以自己寫(xiě)一些小腳本,搞個(gè)簽到,搶票,游戲外掛啊什么的(比如雙11時(shí)候的11.11秒那個(gè)),如果你手頭有大量閑置安卓手機(jī),寫(xiě)個(gè)腳本,開(kāi)個(gè)小工作室?guī)蛣e人掛掛機(jī)刷刷金幣,刷刷任務(wù)什么的,也是可以的,這都是后話了。
總結(jié)一下
以下情況,可以考慮使用Appium:
- 你要爬的數(shù)據(jù)不是太多,你又懶得寫(xiě)代碼
- 參數(shù)加密太難搞定或者網(wǎng)站反爬太嚴(yán)格
- 有些數(shù)據(jù)App特有
- 每天定點(diǎn)注冊(cè),有短信加滑動(dòng)驗(yàn)證碼
- 就是自己私底下想搞些節(jié)省人力的小腳本
以下情況,請(qǐng)不要優(yōu)先使用Appium:
- 老大急著要數(shù)據(jù)
- 爬取數(shù)據(jù)量巨大,除非你有大量閑置電腦或者手機(jī)
- 必須追求穩(wěn)定,因?yàn)槟M器和手機(jī)偶爾抽風(fēng)也很正常。
- 硬件性能不高,如果用安卓模擬器,必須要有顯卡,否則模擬器不讓你安裝,即使安裝上也卡成PPT,不過(guò)我后邊會(huì)介紹如何將模擬器部署Docker,因?yàn)槭菬o(wú)界面的,比較輕量級(jí),對(duì)顯卡也無(wú)硬性要求。
推薦閱讀:小米手環(huán)3nfc支持城市