adb+python实现自动领喵币
今天使用Python+adb 來實(shí)現(xiàn)淘寶自動領(lǐng)喵幣。
簡單說一下adb是什么,adb中文名安卓調(diào)試橋。簡單來說,可以用它來模擬手機(jī)的操作,調(diào)試手機(jī)等等。
https://developer.android.google.cn/studio/command-line/adb
首先要配置好開發(fā)環(huán)境,
開發(fā)環(huán)境配置好了就可以用python調(diào)用adb寫程序了。程序主要過程就是:1)截圖;2)找點(diǎn);3)點(diǎn)擊。沒有特別的地方,但是要注意的是,這里我的屏幕是1080*1920的,如果你的屏幕分辨率不一樣的話,可能要修改坐標(biāo)(因?yàn)槿シ窒硪彩羌t色的,所以程序找點(diǎn)的起點(diǎn)是去分享下面(不然就會一直點(diǎn)去分享))。
#稍微修改了一下2020/5/30 08:38 #需要配置好adb。 #運(yùn)行前打開淘寶,進(jìn)入領(lǐng)喵幣活動頁面。 import os import timefrom PIL import ImageMAX_TIMES = 15 # 自定義最大瀏覽次數(shù)#用來執(zhí)行命令,這里加了延遲 def execute_cmd(args):DELAY_SECOND = 3#延遲時間, 因?yàn)榫W(wǎng)絡(luò)和手機(jī)響應(yīng)速度不同,反應(yīng)慢的可以改大一些。time.sleep(DELAY_SECOND) #等待上一步操作響應(yīng)完成os.system(args)#截圖保存到手機(jī)上, 上傳到電腦上 def screencap():execute_cmd('adb shell screencap -p /sdcard/screen.png')execute_cmd('adb pull /sdcard/screen.png')#獲取顏色z(rgb)對應(yīng)的坐標(biāo)(x,y) def get_pos(z,x_start=953,y_start=0):image = Image.open('screen.png')width = image.size[0]height = image.size[1]for x in range(x_start, x_start+100 if x_start+100<width else width):for y in range(y_start,height):data = image.getpixel((x,y))[:3]if data == z:return (x,y)# 進(jìn)入領(lǐng)喵幣中心 def enter_miaobi_center():# 截圖screencap()z = (249, 239, 108)pos = get_pos(z)execute_cmd('adb shell input tap {} {}'.format(pos[0], pos[1]))# 瀏覽店鋪 def browse_stores():BROWSER_WAIT = 15 #瀏覽等待15秒screencap()# z是在'去瀏覽'圖標(biāo)上取色得到的rgb,用來定位'去瀏覽'坐標(biāo)z = (237, 46, 67)for i in range(0, MAX_TIMES):pos = get_pos(z, 790, 1190)print(pos)#調(diào)試用# 點(diǎn)擊去瀏覽execute_cmd('adb shell input tap {} {}'.format(pos[0], pos[1]))# 下滑瀏覽,防止第一次沒滑動成功,滑動兩次execute_cmd('adb shell input swipe 900 1500 900 500 200')execute_cmd('adb shell input swipe 900 1500 900 500 200')print('進(jìn)入店鋪,瀏覽頁面中,請等待15s...')time.sleep(BROWSER_WAIT)# 返回execute_cmd('adb shell input keyevent 4')print('END')if __name__ == '__main__':try:enter_miaobi_center()except:print("進(jìn)入喵幣中心失敗,可能已經(jīng)進(jìn)入領(lǐng)喵幣中心,嘗試進(jìn)入瀏覽頁面...")try:browse_stores()except:print('瀏覽失敗')另外,實(shí)現(xiàn)找點(diǎn)的方法除了像素點(diǎn)檢測,還可以調(diào)用opencv的函數(shù)matchTemplate來實(shí)現(xiàn)。這種方法更加準(zhǔn)確(因?yàn)樗梢云ヅ湟粔K區(qū)域,而不是一個點(diǎn))。另外這種方法的通用性更好。
有關(guān)matchTemplate的文章: https://www.jianshu.com/p/c20adfa72733
補(bǔ)充一個adb無線連接的方式,只要第一次用數(shù)據(jù)線連接,之后只要在同一局域網(wǎng)內(nèi)就可以無線連接了。(參考http://www.aoaoyi.com/archives/738.html#chapter2.3)
2.3、無線連接(需要借助 USB 線)
除了可以通過 USB 連接設(shè)備與電腦來使用 adb,也可以通過無線連接——雖然連接過程中也有需要使用 USB 的步驟,但是連接成功之后你的設(shè)備就可以在一定范圍內(nèi)擺脫 USB 連接線的限制啦!
操作步驟:
1.將 Android 設(shè)備與要運(yùn)行 adb 的電腦連接到同一個局域網(wǎng),比如連到同一個 WiFi。
2.將設(shè)備與電腦通過 USB 線連接。應(yīng)確保連接成功(可運(yùn)行 adb devices 看是否能列出該設(shè)備)。
3.讓設(shè)備在 5555 端口監(jiān)聽 TCP/IP 連接:
adb tcpip 5555
4.斷開 USB 連接。
5.找到設(shè)備的 IP 地址。
一般能在「設(shè)置」-「關(guān)于手機(jī)」-「狀態(tài)信息」-「IP地址」找到,也可以使用下文里 adb 命令來查看設(shè)備信息 – IP 地址 。
6.通過 IP 地址連接設(shè)備。
adb connect
這里的 就是上一步中找到的設(shè)備 IP 地址。
7.確認(rèn)連接狀態(tài)。
總結(jié)
以上是生活随笔為你收集整理的adb+python实现自动领喵币的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 〖Python 数据库开发实战 - Py
- 下一篇: python毕业设计项目源码选题(10)