2017年12月28日,微信放出了 6.6.1 版本,在微信首頁二樓(下拉出現)位置重磅推出了“跳一跳”小程式,瞬間刷爆朋友圈。
在大家忙於遊戲的時候,有人獨闢蹊徑基於 python + WebDriverAgent 實現了通過 PC 遠端操控手機“跳一跳”小程式小人自動跳動,將分數刷到了令人髮指的地步,悄悄佔領朋友圈第一。
目前已經有比較火的幾篇文章詳細講如何實現上述操作,但是或多或少存在描述不夠詳細、引數設定只在某些機型上表現較好的問題。這也造成我在根據這些教程實現過程中踩了幾個小坑。本文基於 Macbook + iphone 6s plus 來講一下如何實現上述過程,也將踩過的坑記錄下。
環境準備
安裝 python3
下載並點選安裝。下載地址:www.python.org/downloads/m… 在終端 terminal 中輸入如下命令,檢視是否安裝 python3 成功。
~ python3 -V
Python 3.6.4
複製程式碼
建立 python3 虛擬環境
文件地址:docs.python.org/3/tutorial/… 方法如下:
~ python3 -m venv tutorial-env
~ source tutorial-env/bin/activate
(tutorial-env) ➜ ~
複製程式碼
安裝 pip
安裝 python 包管理工具 pip。 文件地址:pip.pypa.io/en/latest/i… 方法如下:
(tutorial-env) ➜ ~ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
(tutorial-env) ➜ ~ python get-pip.py
複製程式碼
安裝 xcode
通過 appstore 安裝
安裝 WebDriverAgent
xcode,儘量新版。儘量升級Xcode到最新版,保持iPhone的版本大於9.3。
從github上下載程式碼
git clone https://github.com/facebook/WebDriverAgent
複製程式碼
安裝 carthage
brew install carthage
複製程式碼
執行初始化指令碼
./Scripts/bootstrap.sh
複製程式碼
該指令碼會使用Carthage下載所有的依賴,使用npm打包響應的js檔案
執行完成後,直接雙擊開啟WebDriverAgent.xcodeproj這個檔案。
設定證照
設定證照籤名,Team 一欄勾選個人賬號即可。
接著在TARGETS裡面選中WebDriverAgentRunner,用同樣的方法設定好證照 重新命名WebDriverAgent的BundleID,避免重名。 接著在TARGETS裡面選中WebDriverAgentRunner,用同樣的方法重新命名。執行和測試
Xcode - Product - Scheme 中選擇 WebDriverAgentRunner。
將 iphone 通過資料線連線到 macbook 上。 在 Xcode - Product - Destination 中選擇資料線連線的 iphone 。執行 Xcode - Product - Test
埠轉發
~ brew install libimobiledevice
~ iproxy 8100 8100
複製程式碼
使用iproxy --help 可以查到更具體的用法。 這時通過訪問http://localhost:8100/status確認WDA是否執行成功。
而inspector的地址是http://localhost:8100/inspector, inspector是用來檢視UI的圖層,方便寫測試指令碼用的
使用 python 控制 iphone 自動跳一跳
獲取 python 跳一跳程式碼
git clone git@github.com:korbinzhao/wechat_jump_game.git
複製程式碼
安裝 facebook-wda
(tutorial-env) ➜ ~ pip3 install --pre facebook-wda
複製程式碼
安裝專案依賴
(tutorial-env) ➜ wechat_jump_game git:(master) ✗ pip3 install -r requirements.txt
複製程式碼
拷貝 ./config/iPhone 目錄下對應的裝置配置檔案,重新命名並替換到 ./config.json
在手機中開啟小程式介面,執行 python 指令碼
(tutorial-env) ➜ wechat_jump_game git:(master) ✗ python3 wechat_jump_auto_iOS.py
複製程式碼
最終效果