用Python爬取手機APP
前言
如果你以為python只可以爬取web網頁,那就大錯特錯了,本篇文章教你如何爬取手機app的資訊。
Charles(抓包工具)的安裝
1.1 下載
由於是收費軟體,這裡給大家一個連結,自行下載,windows版本,如果是其他系統還是去官網咖。https://www.charlesproxy.com
windows版:
網盤下載連結及提取碼請掃碼關注文末公眾號後回覆“抓包”獲取
1.2 安裝證書
由於現在的網站基本全都是https通訊協議,所以我們需要配置SSL證書。
下載完成後開啟軟體。點選help–>SSL Proxying–>install Charles Root Centificate。
在彈出的安裝證書頁面,點選安裝證書,點下一步–選擇證書的儲存區域–下一步–選擇將所有的證書都放如下列儲存–瀏覽–受信任的根證書頒發機構–確定–下一個–是--安裝完成。
1.3 手機安裝證書(Android)
在pc端的Charles中檢視代理是否開啟。Proxy–>Proxy Settings。檢視HTTP Proxy 是否開啟,沒有開啟的點選 Enable transparent HTTP proxying,點選ok即可。
手機和電腦連同一個wifi,檢視一下電腦的ip地址。我的是192.168.1.17。開啟手機的wifi,連上wifi,代理,手動,主機名填寫ip地址,也就是192.168.1.17.預設埠號是8888,電腦上會彈出一個是否信任的視窗,點選Allow即可。
手機端在瀏覽器(不要用原裝瀏覽器)中開啟chls.pro/ssl
1.4 體驗一下Charles
點一下左側的掃把,清空,開啟監聽,即左側第二個按鈕。手機開啟qq,開啟列表一直劃,會看到左側出現了很多請求,遺憾的是隻能看到好友的頭像,其他內容都加密了。捕捉到資訊後點擊一下,再點選右邊的Contents,可以看下返回的資料,json,jsontext 等等,捕捉到的資訊足夠我們分析頁面就好了。可以自己動手體驗一下。
Appium的安裝
appium是什麼?和selenium很像,一個在pc端,一個在手機端而已。
appium下載地址:https://github.com/appium/appium-desktop/releases
Android Studio下載地址:https://developer.android.com/studio/index.html?hl=zh-cn
我們還需要安裝java環境。和nodejs,這些直接百度下載,安裝即可,需要配置好環境變數。
appium的使用
安裝好所有的配置環境後。我們開啟appium、會看到這個頁面。
我們直接點選 Start Server 即可。注意,appium使用的前提是需要android sdk和 java環境。如果沒有配置好,後面執行是會報錯的,出現錯誤可以後臺直接回復,看到會第一時間回覆。點選之後我們進入到這個頁面:
我們點選右上角第一個像搜尋的按鈕,建立一個新的Session,會出現:
此時我們需要將我們的Android手機用資料線和電腦連線,並且把手機的use除錯功能開啟。我們可以輸入dos命令,檢視手機是否已經連線並開啟了usb除錯功能。adb devices -l 會看到:
表示手機連線成功,如果沒有出現,說明可能手機沒有開啟usb除錯功能。model 表示手機型號.
接下來,我們在新建立的Session中寫點配置,實現自動開啟微信頁面。
"platformName": "Android",
"deviceName": "MI_6",
"appPackage": "com.tencent.mm",
"appActivity": ".ui.LauncherUI"
platformName:平臺名稱,我們的是Android。
deviceName:手機型號。
appPackage:微信的包名。
appActivity:微信的入口。
點選Save, 再點選Start Session,會看到如下頁面。
找到我們的登入按鈕,點選一下右側Tab,即可進入登入頁面:
同樣的,我們定位到手機號按鈕,點選右側的Send keys, 即可:
點選Send keys 即可同步。如果要生成對應的python程式碼,可以這樣:
點選最上方第三個錄製按鈕,再點一下Tab,在Recorder選擇python即可。
用python操控app
2.1 開啟微信
這樣即可達到開啟微信的操作。
2.2 點選登入輸入電話號碼
這裡需要有selenium的基礎和解析庫的基礎,不知道的可以看下:連線1,連線2
2.3 獲取微信按鈕的id
其他操作
上一個示例已經完成初始化desired capabilities,定位到元素,點選,文字輸入操作操作。
3.1 螢幕滾動操作
scroll(‘被操控元素’,‘目標元素’)
3.2 利用座標滾動
swipe(start_x,start_y,end_x,end_y,duration = None)
start_x:起始座標橫座標。
start_y:起始座標縱座標。
end_x:結束座標橫座標。
end_y:結束座標縱座標。
duration:點選的持續時間。
還有一個方法沒有持續時間,直接快速滑倒該位置。
flick(start_x,start_y,end_x,end_y)
3.3 拖拽操作
drag_and_drop(‘被拖拽元素’,‘拖拽到的目標元素’)
更多案例請關注“思享會Club”公眾號或者關注思享會部落格:http://gkhelp.cn/