有沒有想過讓你的手機幫你自動完成某些事情
比如自動幫你搶紅包
有些軟件不是有簽到活動么
這些傻瓜式的操作
能不能讓手機自動簽到呢?
自動幫你叫外賣
自動幫你打電話
等等
還有
對于手機上的一些比較難以通過抓包獲取的數據
想不想像 selenium 那樣輕松獲取?
之前小帥b就給大家介紹了 selenium
python爬蟲09 | 上來,自己動!這就是 selenium 的牛逼之處
可以模擬人類自動操作瀏覽器上的網頁
我們還使用它爬取了
“雞你太美”
python爬蟲11 | 帶你爬取b站上的NBA形象大使蔡徐坤和他的球友們
相信你已經體驗到 selenium 的魅力了
對于一些復雜的 PC 端的網頁爬取
它就是個利器
不過
對于手機上的一些稍微復雜點的 APP 數據
selenium 就顯得有點無能為力了
那么
有沒有像 selenium 這樣的框架
可以模擬人類自動操作手機上的 APP 呢
答案是肯定的
那就是
Appium
如何讓它來自動操作我們的手機呢
那么
接下來就是
學習 python 的正確姿勢
為什么說 Appium 牛逼呢
說 4 點足以
1、他是開源的手機端自動測試框架
2、selenium可以做的 Appium 都可以做,selenium不可以做的Appium 依然可以做,它能夠支持 Android、iOS、windows 系統的原生 APP 進行自動操作
3、它可以支持不同的語言寫腳本,比如我們的 Python,還有Java、JavaScript 等
4、以前你想要爬取 App 的數據的時,對于較難抓取的數據,你還需要對 App 進行反編譯,很麻煩,但是 Appium 就不需要這么麻煩
那 Appium 是怎么玩的呢
你可以把 Appium 當做是一個服務器
我們將我們寫的控制操作 APP 的 python 代碼
扔給 Appium
Appium 得到了請求,看到你跟它說要怎么去操作 APP
它就乖乖的聽你話去操作 APP 了
我們在使用 Appium 之前
我們需要安裝相關的環境才可以使用
由于 Android 開源又好用,又有虛擬機可以玩
所以我們要的就是自動操作 Android 手機
具體來說
我們需要安裝以下環境
真香警告
Appium 雖然比 selenium 對環境的要求相對復雜一丟,但是相信我,搞定之后你絕對會體驗到 Appium 的魅力,接下來要說的內容相對干貨,你需要拿出點時間,然后跟著 小帥b 一步一步裝起來,如果你之前沒接觸相關的環境安裝,可能在安裝過程中你會說幾次臟話,沒關系,"挖槽","TMD" 完之后,都給我安裝好以下內容。
1、node.js 和 npm
Appium需要
2、JDK
java 環境,Android需要這個環境
3、Android SDK
Android強大的開發工具包
4、Android虛擬機
可選,如果你用你的真雞也可以的,用 usb 插入電腦就行
5、Appium
我們的主角
6、Appium-Python-Client
python客戶端,用來連接 Appium
7、Python
python相信你早已經安裝了,還沒有安裝的是豬吧?
那么接下來
小帥b教你一步一步地安裝起來
不同的操作系統安裝方式可能有些許不同
但都差不多也就那會事
1、安裝node和npm
你可以到以下鏈接去下載 node 安裝包
https://nodejs.org/zh-cn/download/
然后一頓安裝
windows安裝的時候記得勾選 Add to path (添加到環境變量)
如果你和小帥b一樣用 ubuntu 這種類 Unix 系統的話輸個命令就行
sudo apt-get updatesudo apt-get install nodejs
然后你輸入命令 node -v
如果顯示版本號就說明你成功安裝 node 了
xiaoshuaib@xiaoshuaib:~$ node -vv10.15.3
安裝 node 過程中同時也安裝了 npm 了
輸入 npm -v 有顯示版本好的話說明你安裝好了 npm
xiaoshuaib@xiaoshuaib:~$ npm -v6.4.1
2、安裝JDK
你可以到以下鏈接去下載 jdk
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
根據你的系統自行選擇相應的 jdk
安裝完成之后記得配置好 Java 環境變量
如何配置 jdk 環境變量就不在這里說了
因為不同的系統配置方式不同
你可以自行 Google
在你的終端輸入 javac ,如果你得到如下的東西說明你成功安裝好 jdk 和 配置好環境了
xiaoshuaib@xiaoshuaib:~$ javacUsage: javac <options> <source files>where possible options include: -g Generate all debugging info -g:none Generate no debugging info -g:{lines,vars,source} Generate only some debugging info -nowarn Generate no warnings -verbose Output messages about what the compiler is doing -deprecation Output source locations where deprecated APIs are used -classpath <path> Specify where to find user class files and annotation processors -cp <path> Specify where to find user class files and annotation processors -sourcepath <path> Specify where to find input source files -bootclasspath <path> Override location of bootstrap class files -extdirs <dirs> Override location of installed extensions -endorseddirs <dirs> Override location of endorsed standards path -proc:{none,only} Control whether annotation processing and/or compilation is done....
3、安裝Android SDK
有些小伙伴可能之前沒開發過 Android
不過沒關系
Android SDK 是 Android 開發的工具包
下載方式和 JDK 類似
可以到以下鏈接去下載 sdk
https://developer.android.com/studio#downloads
如果你打不開這個鏈接的話
可以用鏡像鏈接
http://www.android-studio.org/index.php/download/hisversion
下載完之后就一頓解壓
解壓完之后打開 sdkmanager
windows的話有界面
直接選擇一個 Android 版本
然后你點擊 install package 就可以了
或者你也可以像 Linux 一樣
解壓完之后
進入目錄中的 /tools/bin
輸入以下命令安裝最新的工具
xiaoshuaib@xiaoshuaib:~/android/tools/bin$ ./sdkmanager "platform-tools" "platforms;android-28"
接著配置一下環境變量
ubuntu 的話可以這樣配
打開 profile
sudo vim /etc/profile
添加你安裝的sdk的目錄
export ANDROID_HOME=/home/xiaoshuaib/androidexport PATH=$PATH:${ANDROID_HOME}/toolsexport PATH=$PATH:${ANDROID_HOME}/platform-tools
然后設置生效后重啟一下
source /etc/profile
windows配置環境變量的話
也是這個道理
在你的電腦--屬性--高級--環境變量
新建一個變量 ANDROID_HOME
值就是你剛剛解壓下來的 Android 目錄
然后在你的 path 中添加
${ANDROID_HOME}/tools;${ANDROID_HOME}/platform-tools
接著
在命令行輸入 adb shell
如果你出現和小帥b以下這樣的就說明你配置對了
xiaoshuaib@xiaoshuaib:~$ adb shell* daemon not running; starting now at tcp:5037* daemon started successfully
4、安裝 android 虛擬機
其實你有真雞的話不用安裝也可以
安裝虛擬機你可以到以下鏈接下載
https://www.genymotion.com/download
想當年小帥b在玩 Android 開發的時候就經常用 genymotion
速度相對來說快了不少
打開虛擬雞或者用你的真雞連接電腦(記得打開usb調試)
然后輸入 adb devices
如果你像小帥b一樣列出你現在的 Android 手機
xiaoshuaib@xiaoshuaib:~$ adb devicesList of devices attached88CKBM622PAM device
那么就說明是正確的啦
5、安裝 Appium
第一種安裝方式
使用命令行用 npm 安裝 Appium
npm install -g appium
ubuntu需要權限的話可以使用如下命令
sudo npm install -g appium --unsafe-perm=true --allow-root
第二種安裝方式
你也可以到以下鏈接直接下載安裝包
https://github.com/appium/appium-desktop/releases
安裝完之后輸入命令 appium
如果你和小帥b這樣的就說明成功安裝 Appium了
xiaoshuaib@xiaoshuaib:~$ appium[Appium] Welcome to Appium v1.12.1[Appium] Appium REST http interface listener started on 0.0.0.0:4723
6、Appium-Python-Client
pip install Appium-Python-Client
OK
那么到現在我們就把該裝的裝完了
酸爽~
我們可以來安裝以下 appium-doctor 來檢測一下我們安裝的環境是否都可以了
npm install -g appium-doctor
安裝完之后輸入 appium-doctor
如果你也出現這樣的
congratulation
你已經搞定所需環境啦
事不宜遲
趕緊整個小例子試試水先
我們就讓它自動打開手機的微信 APP 吧
確保手機連接到電腦
xiaoshuaib@xiaoshuaib:~$ adb devicesList of devices attached88CKBM622PAM device
開啟 Appium
xiaoshuaib@xiaoshuaib:~$ appium[Appium] Welcome to Appium v1.12.1[Appium] Appium REST http interface listener started on 0.0.0.0:4723
寫個python
# coding=utf-8
from appium import webdriver
desired_caps = { 'platformName': 'Android', 'deviceName': '88CKBM622PAM', 'platformVersion': '5.1', 'appPackage': 'com.tencent.mm', 'appActivity': 'com.tencent.mm.ui.LauncherUI' }
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
運行python之后
Appium 開始執行
看看你的手機
自動打開了!
cool~
ok
本篇主要讓你知道怎么安裝這些所需要的環境
可能你現在有點疑問
怎么知道微信的包名的
怎么知道微信的啟動頁面的
python代碼如何寫自動操作的
別急
你先把環境安裝好
下一篇
小帥b將帶你使用 Appium 來爬取 APP 上的數據
期待就好了
帥b老仙
法力無邊
點贊關注一波
給小帥b發點功
近接到公司派的1個任務,讓我爬取騰訊新聞app的熱點榜
此熱點新聞每10分鐘更新1次,所以需要每隔10分鐘爬取一次,然后保存下來。最簡單的辦法就是找電腦網頁版,但是翻遍所有網站也沒有找到這個接口,所以只好乖乖地從手機端爬了。
手機端數據接口參數分析是一件很難的事,我們可以繞過此過程,在APP數據交換的過程通過mitmproxy工具將返回的數據攔截下來。
這種方法的優點就是簡便,分析接口參數,缺點是需要一臺手機,不停地進行數據請求,速度相對較慢,但是對此次爬取來說足夠了。為了節省1部手機,我想到了爬取手機模擬器端APP數據。
下面一起來看看我是怎么實現的吧
1.安裝charles
Charles是一款代理服務器,通過過將自己設置成系統(電腦或者瀏覽器)的網絡訪問代理服務器,然后截取請求和請求結果達到分析抓包的目的。
①下載:https://www.charlesproxy.com/latest-release/download.do
下載完成后,點擊安裝,一路默認安裝即可。
②設置代理
③安裝證書
依次點擊幫助——ssl代理——安裝charles root證書
點擊確定,電腦端證書就安裝完成了
再依次點擊幫助——ssl代理——在移動設備或遠程瀏覽器上安裝charles root證書
然后在模擬器瀏覽器中輸入chls.pro/ssl,會自動下載手機端證書并安裝。
2.安裝appium
依次安裝Adroid SDK、JAVA和appium客戶端即可
3.安裝mitmproxy
mitmproxy是一個支持http和https的抓包程序,類似Fiddler、Cha,只不過它可以對接python1腳本。
①只需執行如下命令即可安裝:Pip install mitmproxy
②證書配置:在命令行輸入mitmdump,然后在用戶目錄找到CA證書
雙擊mitmproxy-ca-cert.p12,在電腦上安裝證書,然后將mitmproxy-ca-cert.pem發送到模擬器上,在手機設置-安全-從SD卡安裝,選中此文件,安裝即可。
4.安裝夜神手機模擬器
安裝地址
http://soft.onlinedown.net/soft/987318.html
一直默認安裝即可
首先設置模擬手機代理ip,長按WireSSID,點擊修改網絡
設置好代理ip,保存即可。
打開模擬器騰訊新聞APP,進入今日熱搜界面,然后在charles中找到該接口
它的url信息為
將該url在瀏覽器中打開
該url看起來是比較復雜的,但是今天我們不去分析它,按照上述所說的方法抓取數據。
第三步:用mitmdump抓包,保存熱點新聞數據
首先設置代理ip,步驟同第二步,不過要把端口設置為8080
然后編寫python腳本抓取第二步的接口
有兩種數據流方式,一種是相應數據response,一種是請求數據request,本次用response,flow代表數據流
為了篩選新聞熱點的數據流,根據第二步url的固定部分判斷該數據流是否是我們要的url,如果是,則保存flow.request.text,用json解析保存到表格內,至此腳本編寫完畢。在腳本所在路徑輸入mitmdump -s demo.py
然后在模擬器中打開騰訊新聞今日熱搜界面
再看看表格中保存的數據
第四步:用appium控制手機模擬器定時啟動騰訊新聞APP
第三步中是手動點擊查看熱點榜,因為此熱點信息是10分鐘更更新1次
所以我們需要用appium寫個腳本,模擬循環進行此過程,同時mitmproxy腳本會截取最新的數據
但是現在還是沒法打開模擬器里的騰訊新聞app,因為模擬器還未連接到主機,還需要在夜神模擬器所在安裝目錄bin路徑下運行以下代碼
再檢測一下
小結:app的爬取是爬蟲最難的部分,涉及很多復雜的逆向分析過程,這次只是借助模擬器介紹了1個非常簡單的app爬取過程,有興趣的朋友可以借此深入學習一下。
1 模擬丁香園的高保真原型
在一般的開發工作之前,我們通常會設計產品原型,大部分為axure繪制的線框圖作為產品的PRD文檔,供UI和開發進行前期工作,但是有的時候客戶、領導想在開發之前,看到產品的概貌,就必須做產品的高保真原型進行模擬,這時如果做出來的原型能運行在手機端,那再好不過,如圖1(注:上圖是仿照丁香園的家庭用藥,做的一個高保真原型,算是免費給丁香園打廣告,是不是考慮給我點廣告費?哈哈)。
原型制作軟件有挺多,不過個人使用之后,最后還是依然堅持使用Axure,優點頗多,也可能是先入為主,這個教程Axure也是必須軟件之一,適配為iphone5s
1、首選是制作高保真原型,如圖2:
圖2 高保真的原型圖
(注:高保真原型最好不要用太多內部框架嵌套,加載速度有點慢,還是用動態面板慢慢做,層級多了要有耐心)
iOS的屏幕尺寸目前是有限的幾種,原型尺寸要和其一致。比如iphone5s視網膜下像素為640*1136(The default full screen size of the iPhone 5 is 320 x 568 px (w x h).就是說320*568已經可以鋪滿全屏,不過,由于Axure導出的原型在iOS上處理status bar時有問題,需要在高度上減去status bar的高度20,就為320*548,所以保證原型的高寬為320和548,如圖3整體高度為548px:
圖3 高寬為320*548
2、F8進行生成設置,設置如下圖4:
圖4 配置設置
按照上圖,設置參數(注:不過閃屏頁面一直無法出現,這個問題我也沒得到解決,有解決的可以回復我)
3、生成原型文件,上傳到axureshare或者放置在EasyWebSevr的根目錄下,用本機IP替代電腦名稱,獲得完整路徑。(不清楚的點擊上期內容如何用EasyWebSvr搭建axure本地環境)
4、復制生成的html中原型鏈接,選擇without Sitemap,如圖5:
圖5 復制鏈接
5、在safari中粘貼鏈接,并打開,已經可以看到和屏幕寬度的界面,并添加到主屏幕,如圖6:。
圖6 添加到主屏幕
6、可以通過桌面的快捷icon,進入原型,這個時候已經適配了手機,躺著桌面的icon,絲毫不會讓人看得出是原型,下圖7:
圖7 test桌面icon快捷啟動
本文作者:某人某年; 轉載自:簡書
*請認真填寫需求信息,我們會在24小時內與您取得聯系。