下载地址:https://www.pan38.com/share.php?code=yULhG 提取码:2233
声明:仅供学习参考使用!
基于AutoJS的美团众包抢单辅助工具实现方案,包含OCR识别、自动抢单和防检测功能:包含三个核心模块:主程序负责调度抢单流程,OCR模块增强订单识别准确率,防检测模块模拟人类操作特征。使用时需开启无障碍服务和悬浮窗权限。
meituan_auto.js
// 基础配置
const CONFIG = {
SCAN_INTERVAL: 800,
TARGET_PRICE: 15,
MAX_DISTANCE: 5,
SAFE_DELAY: [300, 800]
};
// OCR模块初始化
let ocr = $ocr.initialize();
auto();
device.keepScreenOn();
// 主循环
while(true) {
if(currentPackage() != "com.meituan.retail.v.android") {
launch("com.meituan.retail.v.android");
sleep(3000);
}
let screen = captureScreen();
let result = ocr.detect(screen);
processOrders(result);
sleep(CONFIG.SCAN_INTERVAL);
}
// 订单处理逻辑
function processOrders(ocrResult) {
let orders = parseOrders(ocrResult.text);
orders.forEach(order => {
if(filterOrder(order)) {
click(order.position.x, order.position.y);
randomClick(desc("立即抢单").findOne());
randomSleep();
}
});
}
// 订单过滤条件
function filterOrder(order) {
return order.price >= CONFIG.TARGET_PRICE &&
order.distance <= CONFIG.MAX_DISTANCE &&
!order.isLimited;
}
ocr_enhance.js
// 图像预处理
function preprocessImage(img) {
let gray = images.grayscale(img);
return images.adaptiveThreshold(gray, 255, "GAUSSIAN", "BINARY", 11, 2);
}
// 订单信息解析
function parseOrders(text) {
let pattern = /(\d+\.?\d*)元.*?(\d+\.?\d*)km/g;
let orders = [];
let match;
while((match = pattern.exec(text)) !== null) {
orders.push({
price: parseFloat(match[1]),
distance: parseFloat(match[2]),
position: getOrderPosition(match.index)
});
}
return orders;
}
anti_detect.js
随机操作延迟
function randomSleep() {
let delay = random(CONFIG.SAFE_DELAY[0], CONFIG.SAFE_DELAY[1]);
sleep(delay);
}
// 模拟人类点击
function randomClick(uiObj) {
if(!uiObj) return;
let bounds = uiObj.bounds();
let x = random(bounds.left + 10, bounds.right - 10);
let y = random(bounds.top + 10, bounds.bottom - 10);
gesture(random(100, 300), [x, y], [x + random(-5,5), y + random(-5,5)]);
}
// 随机滑动
function randomSwipe() {
let x1 = random(device.width/4, device.width*3/4);
let y1 = random(device.height/3, device.height*2/3);
gesture(500, [x1, y1], [x1, y1 - random(200,400)]);
}
ShizukuConfig.java
public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_CODE = 1001;
private ShizukuConfig shizukuConfig;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
shizukuConfig = new ShizukuConfig();
// 处理权限回调
Shizuku.addRequestPermissionResultListener(new Shizuku.OnRequestPermissionResultListener() {
@Override
public void onRequestPermissionResult(int requestCode, int grantResult) {
if (requestCode == PERMISSION_CODE) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "授权成功", Toast.LENGTH_SHORT).show();
}
}
}
});
}
@Override
protected void onStart() {
super.onStart();
shizukuConfig.init(this);
shizukuConfig.requestPermission(this, PERMISSION_CODE);
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
private static final int PERMISSION_CODE = 1001;
private ShizukuConfig shizukuConfig;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
shizukuConfig = new ShizukuConfig();
// 处理权限回调
Shizuku.addRequestPermissionResultListener(new Shizuku.OnRequestPermissionResultListener() {
@Override
public void onRequestPermissionResult(int requestCode, int grantResult) {
if (requestCode == PERMISSION_CODE) {
if (grantResult == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "授权成功", Toast.LENGTH_SHORT).show();
}
}
}
});
}
@Override
protected void onStart() {
super.onStart();
shizukuConfig.init(this);
shizukuConfig.requestPermission(this, PERMISSION_CODE);
}
}