原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接: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()