利用adb shell和node.js实现抖音自动抢红包功能(推荐)
逻辑很简单,在抖音视频播完之后如果是红包视频,会跳出红包。我们模拟逻辑如下:
- 点击屏幕中央,如果有红包打开红包,没有红包则暂停视频。
- 点击返回按钮,如果有红包关闭红包界面,没有红包提示再按一次退出(其实没退出)。
- 进行上滑操作,进入下一个视频。
点击、返回、上滑,就这么三步行为,无论有红包没红包都成立,只要计算好时间就行。
代码
下面是一段node.js代码:
touch.js
varprocess=require('child_process'); functionexec(shell){ process.exec(shell,function(error,stdout,stderr){ if(error!==null){ console.log('execerror:'+error); } }); } functionclick(){ console.log('click') exec(`adbshellinputtap400600`) setTimeout(back,1000) } functionswipe(){ console.log('swipe') exec(`adbshellinputswipe4008004000500`) setTimeout(click,20000) } functionback(){ console.log('back') exec(`adbshellinputkeyevent4`) setTimeout(swipe,1000) } swipe()
打开手机的开发者模式,启动USB调试,如果是小米请另外打开USB调试(安全设置)。连接手机,打开抖音主界面。将这个js保存到本地,使用node执行即可。
$nodetouch.js
如果发现抖音每20秒上滑一次,说明成功啦~
原理
类似使用adbshell来操作手机的文章还有操作跳一跳等,下面说下原理。
child_process.exec(command[,options][,callback])
该方法功能为衍生一个shell,然后在shell中执行command,且缓冲任何产生的输出。具体可以看参考文档其实就是等于执行脚本,shell命令了。我们利用它来执行adbshell命令。
adbshell
adb是电脑连接手机的开发工具,所有电脑对手机的操作其实都是adb完成的,包括各种手机助手帮你装APP也是。PS:做了这么久手机,今天才发现这个好玩的功能……汗……
adbshell可以装apk、看手机信息、操作手机文件、模拟点击行为等功能,是非常强大的。我们这里主要是要模拟点击行为adbshellinput。下面罗列下各功能:
//输入文本content $adbshellinputtext“hello” //点击返回按钮keynumber $adbshellinputkeyevent4 //点击屏幕某个点xy $adbshellinputtap400400 //滑动x1y1x2y2time $adbshellinputswipe4008004000500 //下面三个不太清楚,再研究 $adbshellinputpress $adbshellinputroll $adbshellinputtmode
更多按键对应值可以看Androidkeyevent对应的值通过这些命令我们可以对手机进行一些简单操作啦~
最后
这其实是个很简单的逻辑,但是给我很多启发,以后再有什么简单的操作就可以使用adb和node来重复执行啦~最后吐槽下:抖音的红包真的少,昨天刷了3个小时就几毛钱,不够电费的说。就当娱乐吧~
PS:下面介绍下Androidkeyevent对应的值
Androidkeyevent中的各个值,在使用adbshellinput的时候用得到。
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;
好了,内容就介绍这么多。