下载地址:www.pan38.com/dow/share.p… 提取密码:2918
该脚本包含订单识别、条件过滤和自动点击完整流程,通过OCR技术实现非侵入式抢单,包含可视化配置界面。使用时需在Auto.js环境下运行,建议配合定时重启功能防止长时间运行卡顿 。核心算法采用多维度订单评估策略,优先抢高价近距离订单
// 基础配置参数 const CONFIG = { SCAN_INTERVAL: 800, // 扫描间隔(毫秒) MIN_PRICE: 25, // 最低接单价格 MAX_DISTANCE: 8, // 最大接单距离(公里) SCAN_AREA: [150, 300, 900, 1600], // 订单区域坐标[x1,y1,x2,y2] DEBUG_MODE: true // 调试模式 };
// OCR引擎初始化 let ocr = $ocr.create({ models: ["chinese_std"], // 加载中文模型 debug: CONFIG.DEBUG_MODE });
// 主循环监听 function mainLoop() { while (true) { try { let orders = detectOrders(); if (orders.length > 0) { processOrders(orders); } } catch (e) { log("发生错误: " + e); } sleep(CONFIG.SCAN_INTERVAL); } }
// 订单检测核心逻辑 function detectOrders() { let screen = captureScreen(...CONFIG.SCAN_AREA); let results = ocr.detect(screen);
let orders = []; results.forEach(item => { if (isOrderText(item.text)) { let orderInfo = parseOrder(item.text); if (orderInfo) { orderInfo.position = item.bounds; orders.push(orderInfo); } } }); return orders; }
// 订单文本识别 function isOrderText(text) { return text.includes("顺丰") && text.includes("¥") && text.includes("公里"); }
// 订单信息解析 function parseOrder(text) { let lines = text.split("\n").filter(l => l.trim()); if (lines.length < 3) return null;
try { let price = parseFloat(lines^1^.match(/¥(\d+.?\d*)/)^1^); let distance = parseFloat(lines^2^.match(/(\d+.?\d*)公里/)^1^); let address = lines^3^.replace("地址:", "").trim();
return { price, distance, address };
} catch (e) { log("订单解析失败: " + text); return null; } }
// 订单处理逻辑 function processOrders(orders) { orders.forEach(order => { if (order.price >= CONFIG.MIN_PRICE && order.distance <= CONFIG.MAX_DISTANCE) { clickOrder(order.position); } }); }
// 执行点击操作 function clickOrder(bounds) { let x = bounds.left + bounds.width() / 2; let y = bounds.top + bounds.height() / 2; click(x, y); log("已抢单: " + JSON.stringify(bounds)); }
// 启动脚本 auto.waitFor(); mainLoop();
// 创建悬浮控制面板 let window = floaty.window(
);// 配置保存事件 window.saveBtn.click(() => { CONFIG.MIN_PRICE = parseFloat(window.minPrice.text()); CONFIG.MAX_DISTANCE = parseFloat(window.maxDistance.text()); toast("配置已保存"); });