逻辑很简单,在抖音视频播完之后如果是红包视频,会跳出红包。 我们模拟逻辑如下:
点击、返回、上滑,就这么三步行为,无论有红包没红包都成立,只要计算好时间就行。
代码
下面是一段 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*focusKEYCODE_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;
好了,内容就介绍这么多。
新闻热点
疑难解答