利用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奇异的arguments分析
Oct 20 Javascript
Google AJAX 搜索 API实现代码
Nov 17 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
Mar 18 Javascript
css与javascript跨浏览器兼容性总结
Sep 15 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 Javascript
JS实现仿京东淘宝竖排二级导航
Dec 08 Javascript
基于jQuery实现瀑布流页面
Apr 11 jQuery
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 Javascript
JQuery EasyUI的一些常用组件
Jul 12 jQuery
jquery之基本选择器practice(实例讲解)
Sep 30 jQuery
vue-cli webpack2项目打包优化分享
Feb 07 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
Feb 19 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正确配置mysql(apache环境)
2011/08/28 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP随机字符串生成代码(包括大小写字母)
2013/06/24 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
php实现图片缩略图的方法
2016/03/29 PHP
php表单处理操作
2017/11/16 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
用Javascript实现锚点(Anchor)间平滑跳转
2009/09/08 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
2018/12/10 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
Python实现查询某个目录下修改时间最新的文件示例
2018/08/29 Python
浅谈python写入大量文件的问题
2018/11/09 Python
关于pymysql模块的使用以及代码详解
2019/09/01 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
中学教师管理制度
2014/01/14 职场文书
人事助理自荐信
2014/02/02 职场文书
出纳会计岗位职责
2014/03/12 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
生物技术专业求职信
2014/06/10 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
入党团支部推荐意见
2015/06/02 职场文书
花木兰观后感
2015/06/10 职场文书
Dashboard管理Kubernetes集群与API访问配置
2022/04/01 Servers
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python