今年的618比以往活动来的更加早,不少商家都提前了活动,导致剁手党们开始蠢蠢欲动了,每天都守着红包雨,开始猛戳手机屏幕,就算手不累也担心下屏幕吧(不知道有没有买碎屏险,哈哈 ),作为一枚程序员,绝对不能允许重复的动作,这不自动化抢红包程序献上给各位剁手党们。
因为考虑到版权和广告的关系没有用某宝抢红包的截图,这里我是自己模拟了一个抢红包的APP,效果如图:
工欲善其事必先利其器,首先去官网下载并安装对应系统版本的SDK:https://www.androiddevtools.cn/
头部菜单选择Android SDK 工具 > SDK Tools,选择windows版本下载:
下载完成后解压到一个目录 D:\android-sdk-windows\platform-tools
:
双击运行SDK Manager.exe
并下载和更新一些插件和工具:(过程有点慢,可以选择自己需要的安卓版本,然后耐心等待)
配置环境变量,将刚才解压的目录 D:\android-sdk-windows\platform-tools
添加到环境变量:
PS:别忘了安装Java哦
连接方式1:USB连接
首先保证硬件状态正常,包括 Android 设备处于正常开机状态,USB
连接线和各种接口完好,Android 设备的开发者选项和 USB
调试模式已开启。可以到「设置」-「开发者选项」-「Android 调试」查看。如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。
然后保证设备驱动状态正常,这一点貌似在 Linux
和 Mac OS X
下不用操心,在 Windows
下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。
通过 USB
线连接好电脑和设备后确认状态,在cmd
命令行输入adb devices
可以查看当前连接的设备:
PS:请确保打开了开发人员选项和USB调试,否则是看不到设备的,连接方式要传输文件方式。
连接方式2:无线连接(需要借助 USB 线)
除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!
操作步骤:
adb
的电脑连接到同一个局域网
,比如连到同一个 WiFiadb tcpip 5555
adb connect 192.168.xx.xx
来远程连接手机连接成功后就可以操作手机了,先来获取下屏幕的分辨率,后面会有用到:
adb命令有很多,这里列举出一些常见的命令:
命令 | 作用 |
---|---|
adb shell pm list packages | 查看所有应用 |
adb install [-lrtsdg] |
安装apk |
adb pull <设备里的文件路径> [电脑上的目录] | 复制设备里的文件到电脑 |
adb push <电脑上的文件路径> <设备里的目录> | 复制电脑里的文件到设备 |
adb shell input keyevent 26 | 电源键 |
adb shell input keyevent 82 | 菜单键 |
adb shell input keyevent 3 | Home键 |
adb shell input keyevent 4 | 返回键 |
adb shell input keyevent 224 | 点亮屏幕 |
adb shell input keyevent 223 | 熄灭屏幕 |
adb shell input swipe 300 1000 300 500 | 滑动解锁 |
adb shell input tap 50 250 | 点击 |
adb shell input text hello | 输入文本 |
有关ADB教程,点击进入专栏:Awesome Adb
最简单的抢红包形式就是一直在屏幕上点击【抢】,相同时间,点击次数最多,获得的红包就最大,而频繁点击的过程我们可以用 adb
来模拟点击。先截图手机屏幕,然后放到PC查看需要点击的位置的坐标是多少,然后再使用adb
命令触发点击操作。
假如需要点击微信图标,先找到此处的像素坐标(669,1590),然后再执行以下命令则可以马上打开微信:
$ adb shell input tap 669 1590
基本操作就是这样啦,但是总不能在cmd
命令行里面手动执行N
次吧,还是要借助高级语言来实现多次点击,继续往下看
// auto.js
const process = require('child_process')
const touch = function(){
process.exec('adb shell input tap 669 1590',function(error, stdout, stderr){
if (error !== null) {
console.log('exec error: ' + error)
}else{
console.log('exec success')
}
})
}
// 执行次数
let times = 10
while(times > 0){
touch()
times--
}
执行node auto.js
会重复执行adb
命令,执行结果:
$ node auto.js
exec success
exec success
exec success
exec success
exec success
exec success
exec success
exec success
exec success
exec success
Python
实现与NodeJS
类似:
import os
os.system('adb shell input tap 669 1590')
Java
版本因为支持多线程
,这里就使用多线程
来执行adb
命令,这样能防止手机卡死或应用崩溃:
// CmdUtils.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class CmdUtils {
List<String> resultList = new ArrayList<String>();
public List<String> excuteCmd(String command){
String line = null;
StringBuilder sb = new StringBuilder();
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
resultList.add(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return resultList;
}
}
创建100个线程来执行:
// Main.java
public class Main {
public static void main(String[] args) {
// 10个线程执行点击,模拟的点击线程不要超过100,否则对手机会造成损害
for(int i=0;i<100;i++){
new MyThread().start();
}
}
}
// 模拟点击线程
class MyThread extends Thread {
CmdUtils cmdUtils = new CmdUtils();
@Override
public void run() {
super.run();
cmdUtils.excuteCmd("adb shell input tap 504 588");
}
}
红包虽小,但是抢红包的过程才能显出节日氛围,最重要的是它给了你买买买
的勇气,赶紧分享给老婆❤️,女朋友,闺蜜,同学,同事吧,她们的 还有 已经等不及了,赶紧安排,哈哈哈
欢迎点赞评论转发~
PS:注意执行时间间隔不能太小,否则容易导致APP崩溃哦。