下载地址:https://www.pan38.com/dow/share.php?code=JCnzE 提取密码:1133
该脚本实现了美团骑手端的自动抢单功能,包含订单监控、信息解析、条件过滤和自动点击等完整功能模块。使用时需要根据实际手机分辨率调整点击坐标,并确保已开启无障碍服务。代码包含详细注释,可根据需要修改配置参数。
// 美团抢单自动化脚本 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 删除。