利用adb shell和node.js实现抖音自动抢红包功能(推荐)


Posted in Javascript onFebruary 22, 2018

逻辑很简单,在抖音视频播完之后如果是红包视频,会跳出红包。 我们模拟逻辑如下:

  1. 点击屏幕中央,如果有红包打开红包,没有红包则暂停视频。
  2. 点击返回按钮,如果有红包关闭红包界面,没有红包提示再按一次退出(其实没退出)。
  3. 进行上滑操作,进入下一个视频。

点击、返回、上滑,就这么三步行为,无论有红包没红包都成立,只要计算好时间就行。

代码

下面是一段 node.js 代码:

touch.js

var process = require('child_process');
function exec(shell) {
 process.exec(shell,function (error, stdout, stderr) {
 if (error !== null) {
  console.log('exec error: ' + error);
 }
 });
}
function click() {
 console.log('click')
 exec(`adb shell input tap 400 600`)
 setTimeout(back, 1000)
}
function swipe() {
 console.log('swipe')
 exec(`adb shell input swipe 400 800 400 0 500`)
 setTimeout(click, 20000)
}
function back() {
 console.log('back')
 exec(`adb shell input keyevent 4`)
 setTimeout(swipe, 1000)
}
swipe()

打开手机的开发者模式,启动 USB调试 ,如果是小米请另外打开 USB调试(安全设置) 。连接手机,打开抖音主界面。将这个js保存到本地,使用node执行即可。

$ node touch.js

如果发现抖音每20秒上滑一次,说明成功啦~

原理

类似使用 adb shell 来操作手机的文章还有操作跳一跳等,下面说下原理。

child_process.exec(command[, options][, callback])

该方法功能为衍生一个 shell,然后在 shell 中执行 command,且缓冲任何产生的输出。具体可以看参考文档 其实就是等于执行脚本,shell命令了。 我们利用它来执行 adb shell 命令。

adb shell

adb 是电脑连接手机的开发工具,所有电脑对手机的操作其实都是adb 完成的,包括各种手机助手帮你装 APP 也是。 PS:做了这么久手机,今天才发现这个好玩的功能……汗……

adb shell 可以装apk、看手机信息、操作手机文件、模拟点击行为等功能,是非常强大的。我们这里主要是要模拟点击行为 adb shell input 。 下面罗列下各功能:

// 输入文本 content
$ adb shell input text “hello” 
// 点击返回按钮 keynumber
$ adb shell input keyevent 4
// 点击屏幕某个点 x y
$ adb shell input tap 400 400
// 滑动 x1 y1 x2 y2 time
$ adb shell input swipe 400 800 400 0 500
// 下面三个不太清楚,再研究
$ adb shell input press
$ adb shell input roll
$ adb shell input tmode

更多按键对应值可以看 Android keyevent 对应的值 通过这些命令我们可以对手机进行一些简单操作啦~

最后

这其实是个很简单的逻辑,但是给我很多启发,以后再有什么简单的操作就可以使用adb和node来重复执行啦~ 最后吐槽下:抖音的红包真的少,昨天刷了3个小时就几毛钱,不够电费的说。就当娱乐吧~

PS:下面介绍下Android keyevent 对应的值

Android keyevent 中的各个值,在使用adb shell input 的时候用得到。

KEYCODE_UNKNOWN=0;
KEYCODE_SOFT_LEFT=1;
KEYCODE_SOFT_RIGHT=2;
KEYCODE_HOME=3;
KEYCODE_BACK=4;
KEYCODE_CALL=5;
KEYCODE_ENDCALL=6;
KEYCODE_0=7;
KEYCODE_1=8;
KEYCODE_2=9;
KEYCODE_3=10;
KEYCODE_4=11;
KEYCODE_5=12;
KEYCODE_6=13;
KEYCODE_7=14;
KEYCODE_8=15;
KEYCODE_9=16;
KEYCODE_STAR=17;
KEYCODE_POUND=18;
KEYCODE_DPAD_UP=19;
KEYCODE_DPAD_DOWN=20;
KEYCODE_DPAD_LEFT=21;
KEYCODE_DPAD_RIGHT=22;
KEYCODE_DPAD_CENTER=23;
KEYCODE_VOLUME_UP=24;
KEYCODE_VOLUME_DOWN=25;
KEYCODE_POWER=26;
KEYCODE_CAMERA=27;
KEYCODE_CLEAR=28;
KEYCODE_A=29;
KEYCODE_B=30;
KEYCODE_C=31;
KEYCODE_D=32;
KEYCODE_E=33;
KEYCODE_F=34;
KEYCODE_G=35;
KEYCODE_H=36;
KEYCODE_I=37;
KEYCODE_J=38;
KEYCODE_K=39;
KEYCODE_L=40;
KEYCODE_M=41;
KEYCODE_N=42;
KEYCODE_O=43;
KEYCODE_P=44;
KEYCODE_Q=45;
KEYCODE_R=46;
KEYCODE_S=47;
KEYCODE_T=48;
KEYCODE_U=49;
KEYCODE_V=50;
KEYCODE_W=51;
KEYCODE_X=52;
KEYCODE_Y=53;
KEYCODE_Z=54;
KEYCODE_COMMA=55;
KEYCODE_PERIOD=56;
KEYCODE_ALT_LEFT=57;
KEYCODE_ALT_RIGHT=58;
KEYCODE_SHIFT_LEFT=59;
KEYCODE_SHIFT_RIGHT=60;
KEYCODE_TAB=61;
KEYCODE_SPACE=62;
KEYCODE_SYM=63;
KEYCODE_EXPLORER=64;
KEYCODE_ENVELOPE=65;
KEYCODE_ENTER=66;
KEYCODE_DEL=67;
KEYCODE_GRAVE=68;
KEYCODE_MINUS=69;
KEYCODE_EQUALS=70;
KEYCODE_LEFT_BRACKET=71;
KEYCODE_RIGHT_BRACKET=72;
KEYCODE_BACKSLASH=73;
KEYCODE_SEMICOLON=74;
KEYCODE_APOSTROPHE=75;
KEYCODE_SLASH=76;
KEYCODE_AT=77;
KEYCODE_NUM=78;
KEYCODE_HEADSETHOOK=79;
KEYCODE_FOCUS=80;//*Camera*focus
KEYCODE_PLUS=81;
KEYCODE_MENU=82;
KEYCODE_NOTIFICATION=83;
KEYCODE_SEARCH=84;
KEYCODE_MEDIA_PLAY_PAUSE=85;
KEYCODE_MEDIA_STOP=86;
KEYCODE_MEDIA_NEXT=87;
KEYCODE_MEDIA_PREVIOUS=88;
KEYCODE_MEDIA_REWIND=89;
KEYCODE_MEDIA_FAST_FORWARD=90;
KEYCODE_MUTE=91;

好了,内容就介绍这么多。

Javascript 相关文章推荐
javascript 获取表单file全路径
Dec 31 Javascript
JavaScript中实现单体模式分享
Jan 29 Javascript
非常棒的jQuery图片轮播效果
Apr 17 Javascript
jQuery事件绑定on()与弹窗实现代码
Apr 28 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
May 31 Javascript
原生JS实现风箱式demo,并封装了一个运动框架(实例代码)
Jul 22 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
Sep 20 Javascript
layui框架中layer父子页面交互的方法分析
Nov 15 Javascript
Angular4.0动画操作实例详解
May 10 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
May 21 Javascript
vue 使用外部JS与调用原生API操作示例
Dec 02 Javascript
js实现单元格拖拽效果
Feb 10 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
Feb 22 #Javascript
babel之配置文件.babelrc入门详解
Feb 22 #Javascript
javascript填充默认头像方法
Feb 22 #Javascript
一次记住JavaScript的6个正则表达式方法
Feb 22 #Javascript
利用CDN加速react webpack打包后的文件详解
Feb 22 #Javascript
node内置调试方法总结
Feb 22 #Javascript
详解vue移动端日期选择组件
Feb 22 #Javascript
You might like
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
python进程与线程小结实例分析
2018/11/11 PHP
JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后this指向问题
2011/09/28 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
微信小程序 window_x64环境搭建
2016/09/30 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
js实现移动端轮播图效果
2020/12/09 Javascript
探究react-native 源码的图片缓存问题
2017/08/24 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
vue实现a标签点击高亮方法
2018/03/17 Javascript
简单了解TypeScript中如何继承 Error 类
2019/06/21 Javascript
Python中取整的几种方法小结
2017/01/06 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
python3 读取Excel表格中的数据
2018/10/16 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python实现图像全景拼接
2020/03/27 Python
Python 处理日期时间的Arrow库使用
2020/08/18 Python
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
方正Java笔试题
2014/07/03 面试题
司机职责范本
2014/03/08 职场文书
教师产假请假条
2014/04/10 职场文书
银行纠风工作实施方案
2014/06/08 职场文书
医学检验专业自荐信
2014/09/18 职场文书
出纳工作检讨书范文
2014/12/27 职场文书
大学组织委员竞选稿
2015/11/21 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python