首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >美团众包抢单外置器,众包抢单辅助神器app,autojs美团骑手抢单脚本

美团众包抢单外置器,众包抢单辅助神器app,autojs美团骑手抢单脚本

原创
作者头像
用户11749621
发布2025-07-17 12:33:01
发布2025-07-17 12:33:01
6880
举报

下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133

该脚本实现了美团骑手端的自动抢单功能,包含订单监控、信息解析、条件过滤和自动点击等完整功能模块。使用时需要根据实际手机分辨率调整点击坐标,并确保已开启无障碍服务。代码包含详细注释,可根据需要修改配置参数。

代码语言:txt
复制

// 美团抢单自动化脚本 v1.0
// 需要Auto.js 4.1.1及以上版本支持
// 需开启无障碍服务和悬浮窗权限

// ========== 全局配置 ==========
let config = {
    retryInterval: 800, // 检查订单间隔(毫秒)
    maxRetryCount: 50,  // 最大重试次数
    orderFilter: {
        minPrice: 15,   // 最低接单价格
        maxDistance: 5, // 最远距离(公里)
        blackList: ["麦当劳", "肯德基"] // 商家黑名单
    },
    debugMode: true     // 调试模式
};

// ========== 主程序入口 ==========
function main() {
    prepareEnvironment();
    startMonitoring();
}

// ========== 环境准备 ==========
function prepareEnvironment() {
    // 检查无障碍服务
    if (!auto.service) {
        alert("请先开启无障碍服务");
        auto.waitFor();
    }
    
    // 请求悬浮窗权限
    if (!floaty.checkPermission()) {
        floaty.requestPermission();
        sleep(1000);
    }
    
    // 创建悬浮窗控制界面
    let window = floaty.window(
        <frame gravity="center">
            <vertical>
                <text id="status" text="等待启动..." textSize="16sp"/>
                <button id="action" text="开始监控" w="120dp"/>
                <button id="exit" text="退出脚本" w="120dp"/>
            </vertical>
        </frame>
    );
    
    window.action.click(() => {
        if (isMonitoring) {
            stopMonitoring();
            window.status.setText("已停止");
            window.action.setText("开始监控");
        } else {
            startMonitoring();
            window.status.setText("运行中");
            window.action.setText("停止监控");
        }
    });
    
    window.exit.click(() => {
        window.close();
        engines.stopAll();
    });
}

// ========== 订单监控逻辑 ==========
let isMonitoring = false;
let monitoringThread = null;

function startMonitoring() {
    if (isMonitoring) return;
    
    isMonitoring = true;
    monitoringThread = threads.start(function() {
        log("开始监控美团订单...");
        
        while (isMonitoring) {
            try {
                checkNewOrder();
                sleep(config.retryInterval);
            } catch (e) {
                log("监控出错: " + e);
                sleep(3000);
            }
        }
    });
}

function stopMonitoring() {
    if (!isMonitoring) return;
    
    isMonitoring = false;
    if (monitoringThread) {
        monitoringThread.interrupt();
    }
    log("已停止订单监控");
}

// ========== 订单处理核心逻辑 ==========
function checkNewOrder() {
    // 模拟下拉刷新
    swipe(device.width / 2, 300, device.width / 2, 1000, 500);
    sleep(1000);
    
    // 查找订单卡片
    let orderCards = className("android.widget.FrameLayout")
        .depth(10)
        .find();
    
    if (orderCards && orderCards.length > 0) {
        log("发现 " + orderCards.length + " 个潜在订单");
        
        for (let i = 0; i < orderCards.length; i++) {
            let card = orderCards[i];
            let orderInfo = parseOrderInfo(card);
            
            if (isValidOrder(orderInfo)) {
                if (tryGrabOrder(card)) {
                    log("成功抢到订单!商家: " + orderInfo.store);
                    playSuccessAlert();
                    break;
                }
            }
        }
    }
}

// ========== 订单信息解析 ==========
function parseOrderInfo(card) {
    let info = {
        store: "",
        price: 0,
        distance: 0,
        address: "",
        items: []
    };
    
    try {
        // 解析商家名称
        let storeName = card.findOne(className("android.widget.TextView")
            .textMatches(/.+/)
            .depth(12));
        if (storeName) info.store = storeName.text();
        
        // 解析订单价格
        let priceText = card.findOne(className("android.widget.TextView")
            .textMatches(/¥\d+/));
        if (priceText) {
            info.price = parseFloat(priceText.text().substring(1));
        }
        
        // 解析距离信息
        let distanceText = card.findOne(className("android.widget.TextView")
            .textMatches(/.+km/));
        if (distanceText) {
            info.distance = parseFloat(distanceText.text().replace("km", ""));
        }
        
        // 解析配送地址
        let addressText = card.findOne(className("android.widget.TextView")
            .textMatches(/.+区|.+路|.+街/));
        if (addressText) info.address = addressText.text();
        
    } catch (e) {
        log("解析订单信息出错: " + e);
    }
    
    return info;
}

// ========== 订单有效性检查 ==========
function isValidOrder(order) {
    // 基础信息检查
    if (!order.store || order.price <= 0 || order.distance <= 0) {
        return false;
    }
    
    // 价格过滤
    if (order.price < config.orderFilter.minPrice) {
        log("订单价格过低: " + order.price);
        return false;
    }
    
    // 距离过滤
    if (order.distance > config.orderFilter.maxDistance) {
        log("订单距离过远: " + order.distance + "km");
        return false;
    }
    
    // 黑名单检查
    for (let i = 0; i < config.orderFilter.blackList.length; i++) {
        if (order.store.includes(config.orderFilter.blackList[i])) {
            log("商家在黑名单中: " + order.store);
            return false;
        }
    }
    
    return true;
}

// ========== 抢单操作 ==========
function tryGrabOrder(card) {
    try {
        // 查找抢单按钮
        let grabBtn = card.findOne(textMatches(/抢单|立即抢单/));
        if (!grabBtn) {
            grabBtn = card.findOne(className("android.widget.Button"));
        }
        
        if (grabBtn) {
            log("发现可抢订单,尝试点击...");
            clickView(grabBtn);
            sleep(800);
            
            // 处理确认弹窗
            let confirmBtn = textMatches(/确认抢单|确定/).findOne(500);
            if (confirmBtn) {
                clickView(confirmBtn);
                sleep(500);
                return true;
            }
        }
    } catch (e) {
        log("抢单失败: " + e);
    }
    return false;
}

// ========== 工具函数 ==========
function clickView(view) {
    let bounds = view.bounds();
    return click(bounds.centerX(), bounds.centerY());
}

function playSuccessAlert() {
    device.vibrate(500);
    media.playMusic("/sdcard/notification.mp3");
}

function log(msg) {
    console.log(msg);
    if (config.debugMode) {
        toast(msg);
    }
}

// 启动主程序
main();

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档