原創文章,歡迎轉載。轉載請註明:轉載自 祥的博客
原文鏈接:https://blog.csdn.net/humanking7/article/details/102800059
用Python調用adb搶雙十一淘寶喵幣
動機
每次都要跟傻子一樣等個15秒,真的是勞心勞力,時常變動,網上的腳本都得自己改改適應自己的分辨率,故而寫了這篇文章
原理
其實就相當於一個按鍵精靈,用Python調用adb
工具去模擬手指點擊,退出事件,沒什麼科技含量,只是對adb
命令的熟悉情況
代碼
#!/usr/bin/env python
# coding: utf-8
import os
import time
# =================================================
# 模擬滑動
def initlocal():
time.sleep(2) # 滑動前休息2秒,避免網絡不好
os.system('adb shell input swipe 900 1200 900 500') # 模擬從下往上滑動
time.sleep(2) # 滑動後休息2秒,避免開始計時延遲
# =================================================
# 返回上一頁面
def goback():
os.system('adb shell input keyevent KEYCODE_BACK') # 返回
time.sleep(2)
print('退出')
# =================================================
def task_end_1(cnt):
print('\n====== 瀏覽最後一個項目 ======')
print('一共[%d]次'%cnt)
for i in range(1, cnt+1):
os.system('adb shell input tap 900 1950') # 點擊去瀏覽
time.sleep(2) # 滑動前休息2秒,避免網絡不好
initlocal() # 來回移動
print('第[%d]次 進入會場,瀏覽中,請等待 16 秒'%(i))
time.sleep(16)
goback()
# =================================================
def task_end_2(cnt):
print('\n====== 瀏覽倒數第2個項目 ======')
print('一共[%d]次'%cnt)
for i in range(1, cnt+1):
os.system('adb shell input tap 900 1770') # 點擊去瀏覽
time.sleep(2) # 滑動前休息2秒,避免網絡不好
initlocal() # 來回移動
print('第[%d]次 進入會場,瀏覽中,請等待 16 秒'%(i))
time.sleep(16)
goback()
# =================================================
def task_end_3(cnt):
print('\n====== 瀏覽倒數第3個項目 ======')
print('一共[%d]次'%cnt)
for i in range(1, cnt+1):
os.system('adb shell input tap 900 1560') # 點擊去瀏覽
time.sleep(2) # 滑動前休息2秒,避免網絡不好
initlocal() # 來回移動
print('第[%d]次 進入會場,瀏覽中,請等待 16 秒'%(i))
time.sleep(16)
goback()
# =================================================
def task_end_4(cnt):
print('\n====== 瀏覽倒數第4個項目 ======')
print('一共[%d]次'%cnt)
for i in range(1, cnt+1):
os.system('adb shell input tap 900 1340') # 點擊去瀏覽
time.sleep(2) # 滑動前休息2秒,避免網絡不好
initlocal() # 來回移動
print('第[%d]次 進入會場,瀏覽中,請等待 16 秒'%(i))
time.sleep(16)
goback()
# =================================================
# main
# =================================================
os.system('adb shell input tap 900 1700') # 點擊領喵幣,彈出任務菜單
time.sleep(1)
task_end_1(18) # 瀏覽最後1個項目,共18次
task_end_2(1) # 瀏覽倒數第2個項目,共1次
task_end_3(1) # 瀏覽倒數第3個項目,共1次
task_end_4(1) # 瀏覽倒數第3個項目,共1次
print('\n=================')
print('全部任務已完成')
os.system("pause")
使用方法
1.安裝python;
2.安裝Android SDK ,並設置環境變量,運行adb有相應的顯示結果;
如何正確安裝ADB工具
其實不一定要安裝和配置環境,如果有各種手機PC軟件,裏面都有adb.exe
,將python腳本
複製到該目錄下,運行腳本即可。
3.手機連接電腦,打開開發者選項,並允許USB調試,允許模擬點擊;
4.打開手機天貓,進入開喵鋪界面(不用打開任務列表)。運行此程序。
聲明&鳴謝
因爲對adb
不是很瞭解,參考了一個不知作者的腳本,然後改了此腳本,對無私開源奉獻的鬥士們表示感謝,而且突然發現這個adb
蠻有意思的,也很強大,以後可以向這方面做點了解。
此程序僅供技術交流,請勿使用於非法用途,任何人或組織無論以何種形式將其用在其他任何地方由此引發的各種問題均與本人無關
部分知識來源網絡,如有侵權請聯繫刪除。
2020.1.7補充
京東又有活動了,原先寫的代碼demo感覺各種不美麗,主要是函數寫的可重用性太差,簡直是恥辱,改進了,對於任務只用一個函數即可:
def tapTask(cnt, x, y, waitTime=5):
"""
@cnt: 循環點擊次數
@x: 手機像素位置x
@y: 手機像素位置y
@waitTime: 等待時間
"""
print('\n================')
print('瀏覽(%d,%d) %d 次,每次 %d 秒'%(x, y, cnt, waitTime))
adbStr = 'adb shell input tap %d %d'%(x, y)
for i in range(1, cnt+1):
os.system(adbStr) # 點擊去瀏覽
time.sleep(2) # 滑動前休息2秒,避免網絡不好
initlocal() # 來回移動
print('\t第[%d]次 進入任務,瀏覽中,請等待 %d 秒'%(i, waitTime))
time.sleep(waitTime)
goback()