用python寫一個微信跳一跳外掛,瞬間稱霸朋友圈
你們跳的再好,在毫無心理波動的程序面前都是渣渣。
剛剛會python的小白想玩怎麽辦?
下有詳細的教程,哈哈,包教會不收任何的費用。
感受一下被支配的恐懼吧:
使用工具
1.python3.6
2.adb
3.安卓手機(版本4.4+)
使用原理
=== 思路 ===
核心:每次落穩之後截圖,根據截圖算出棋子的坐標和下一個塊頂面的中點坐標,
根據兩個點的距離乘以一個時間系數獲得長按的時間
識別棋子:靠棋子的顏色來識別位置,通過截圖發現最下面一行大概是一條直線,就從上往下一行一行遍歷,
比較顏色(顏色用了一個區間來比較)找到最下面的那一行的所有點,然後求個中點,
求好之後再讓 Y 軸坐標減小棋子底盤的一半高度從而得到中心點的坐標
識別棋盤:靠底色和方塊的色差來做,從分數之下的位置開始,一行一行掃描,由於圓形的塊最頂上是一條線,
方形的上面大概是一個點,所以就用類似識別棋子的做法多識別了幾個點求中點,
這時候得到了塊中點的 X 軸坐標,這時候假設現在棋子在當前塊的中心,
根據一個通過截圖獲取的固定的角度來推出中點的 Y 坐標
最後:根據兩點的坐標算距離乘以系數來獲取長按時間(似乎可以直接用 X 軸距離)
ADB
首先碰到的就是什麽是adb。
Android Debug Bridge
:Android操作系統與桌面×××間溝通的一個命令列工具。
:可以在×××上通過命令達到操作手機的效果。
下載
在許多Android用戶多次呼籲之後,Google終於將ADB和Fastboot作為單獨的文件提供給用戶下載。以前這些文件只包含在大尺寸的Android SDK或Android Studio當中提供給用戶,現在這種變化意味著它們現在比以往更快,更容易執行和側載。
這樣就免去了下載一個600M的Android SDK,這也是坑了我。
下載之後將其添加到環境變量中去。
手機打開開發者,USb調試,用數據線連接到×××上,如果手機界面顯示USB授權,請點擊確認。
在cmd輸入
adb
就可以使用了,本次使用的命令和常用的幾個命令
本次使用到的命令,先了解這寫就可以應對
adb start-server 開啟進程
adb shell screencao -p /sdcard/i.png 對手機進行截屏保存到sdcard的目錄下面。
adb pull /sdcard/i.png . 將sdcard目錄下的i.png傳送到當前目錄下面
adb pull /adcard/i.png D://
註意這些命令在adb下 而不是在shell下面。
adb shell screencap -p /sdcard/1.png adb pull /sdcard/1.png .
用adb工具點擊屏幕蓄力一跳。
adb shell input swipe x y x y time
遇到的問題
最開始一直沒有檢測到手機。然後用360助手排查問題。找到開發者。就是連不上。最可氣的就是硬件的問題吧。後來換了一個數據線。解決端口被360手機助手占用。
進程中退掉360 手機助
使用安卓模擬器上面的微信的版本不支持(可能是我忘了更新了吧!)。暫時還是用到了真機上的微信。找來多年不用的安卓機。然後一頓root。
玩了好大一會 ,一個一個測試命令,當玩到
adb shell input swipe x y x y time
這條命令的時候延伸
adb shell input(Android模擬輸入),input可以用來模擬各種輸入設備的輸入操作。
D:\>adb shell input
usage: input ...
input text <string>
input keyevent <key code number or name>
input [touchscreen|touchpad|touchnavigation] tap <x> <y>
input [touchscreen|touchpad|touchnavigation] swipe <x1> <y1> <x2> <y2> [duration(ms)]
input trackball press
input trackball roll <dx> <dy>
- keyevent指的是android對應的keycode,比如home鍵的keycode=3,back鍵的keycode=4.
具體請查閱 android keycode詳解
然後使用的話比較簡單,比如想模擬home按鍵:
adb shell input keyevent 3
請查閱上述文章,根據具體keycode編輯即可。
不僅有滑動的操作,還有其他的鍵的操作。更多參考
adb shell input keyevent 3 home鍵返回
adb shell input keyevent 4 返回鍵
- 關於tap的話,他模擬的是touch屏幕的事件,只需給出x、y坐標即可。
此x、y坐標對應的是真實的屏幕分辨率,所以要根據具體手機具體看,比如你想點擊屏幕(x, y) = (250, 250)位置:
adb shell input tap 250 250
-
關於swipe同tap是一樣的,只是他是模擬滑動的事件,給出起點和終點的坐標即可。例如從屏幕(250, 250), 到屏幕(300, 300)即
adb shell input swipe 250 250 300 300
//滑動
adb shell input swipe 100 100 200 200 300 //從 100 100 經歷300毫秒滑動到 200 200
//長按
adb shell input swipe 100 100 100 100 1000 //在 100 100 位置長按 1000毫秒
特別註意下 swipe後面跟的有時間的參數[duration(ms)],這個與手機的版本的問題有關。
input命令是用來向設備發送模擬操作的命令:
因為版本不同,input命令也有所不同
以下為Android 4.0的input命令:
usage:input text <string>
input keyevent <key code number or name>
input tap <x> <y>
input swipe <x1> <y1> <x2> <y2>
以下是Android 4.4+的input命令:
usage: input ...
input text <string>
input keyevent <key code number or name>
input [touchscreen|touchpad|touchnavigation] tap <x> <y>
input [touchscreen|touchpad|touchnavigation] swipe <x1> <y1> <x2> <y2> [duration(ms)]
input trackball press
input trackball roll <dx> <dy>
明顯兩個版本的input命令是有差異的,也就是說在版本是4.4以下的情況下。是不能用swipe後面跟時間的。在使用的時候一定要記得查詢清楚所使用的Android版本!
(我拿到手機後就root了,然後一看版本是4.3的,拿著4.3版本的手機心中飛過***,好的一點是還有一個手機,就升級一下版本,這樣換手機在接著搞。其他就不會出現什麽錯誤了)
小結
adb在這次所起到的作用是什麽?
1.簡單來說截取跳一跳中的圖片(用python分析計算)
2.精確執行命令,包括按壓的時間,按壓的間隔(python通過調用cmd能做到)
小編有自己的python學習交流群,大家如果想要來學習的話,可以加下:588+090+942不管你是小白還是大牛,小編都歡迎,而且小編會在群裏面不定期分享幹貨,包括小編自己整理的一份2018年最新學習資料和零基礎入門教程,歡迎初學和進階中的小夥伴
用python寫一個微信跳一跳外掛,瞬間稱霸朋友圈