部署和运行
- 安装Auto.js:从Auto.js的GitHub页面下载并安装。
- 创建脚本:在Auto.js中创建新脚本,将下述代码粘贴进去并保存。
- 运行脚本:在Auto.js中运行脚本,确保猫眼APP在前台运行。
Auto.js官网: https://pro.autojs.org
Auto.js官方文档: https://pro.autojs.org/docs
Auto.js官方博客: https://blog.autojs.org
脚本代码
console.setTitle("猫眼抢票助手", "#ff00ff00", 25);
console.log("准备开始抢票...");
var interval = 100; // 设置刷新频率(毫秒)
openConsole();
// 设置开抢时间
var UIStartTime = '05-28 12:38'; // 必填
var list = []; // 可以添加需要抢的日期列表
var pp = ''; // 设置金额,不设置则随机抢
main();
// 主函数
function main() {
if (UIStartTime != "") {
// 获取系统本地时间
var strStartTime = UIStartTime;
// 设置开抢时间
var year = new Date().getFullYear();
var month = parseInt(strStartTime.slice(strStartTime.indexOf("-") - 2, strStartTime.indexOf("-"))) - 1; // 月份减1
var day = parseInt(strStartTime.slice(strStartTime.indexOf(" ") - 2, strStartTime.indexOf(" ")));
var hour = parseInt(strStartTime.slice(strStartTime.indexOf(":") - 2, strStartTime.indexOf(":")));
var minute = parseInt(strStartTime.slice(strStartTime.indexOf(":") + 1, strStartTime.indexOf(":") + 3));
var second = 0;
var msecond = 0;
var startTimestamp = new Date(year, month, day, hour, minute, second, msecond).getTime();
print("获取到开抢时间: " + strStartTime);
startTimestamp = startTimestamp - 40; // 减去 40ms 的网络延迟
var damaiTimestamp;
var startTime = convertToTime(startTimestamp);
print("开始时间:\n", startTime);
print("等待开抢...");
var i = 0;
// 循环等待,直到到达开抢时间
while (true) {
damaiTimestamp = getDamaiTimestamp();
if (damaiTimestamp >= startTimestamp) {
print("到点了,自动开始。");
break;
}
var mm = startTimestamp - damaiTimestamp;
var ss = mm / 1000;
if (ss > 100) {
print("剩余:" + (ss) + "秒");
} else {
print("剩余:" + (mm) + "毫秒");
}
// 定期清屏
if (i % 200 == 0) {
print("清屏");
console.clear();
}
i++;
sleep(interval); // 设置刷新频率
}
// 开抢
while (true) {
var but1 = className("android.view.View").text("立即预订").exists();
var but2 = className("android.view.View").text("立即购票").exists();
var but3 = className("android.view.View").text("特惠购票").exists();
var but4 = className("android.view.View").text("特惠预订").exists();
var but5 = className("android.view.View").text("缺货登记").exists(); // 添加抢回流票的按钮
var result = but1 || but2 || but3 || but4 || but5;
if (result) {
if (but1) {
className("android.view.View").text("立即预订").findOne().click();
} else if (but2) {
className("android.view.View").text("立即购票").findOne().click();
} else if (but3) {
className("android.view.View").text("特惠购票").findOne().click();
} else if (but4) {
className("android.view.View").text("特惠预订").findOne().click();
} else if (but5) {
className("android.view.View").text("缺货登记").findOne().click(); // 抢回流票
}
print("点击了立即购票相关按钮");
break;
} else {
// 如果没有按钮可点击,继续刷新页面以抢回流票
swipeRefresh(); // 调用页面刷新函数
}
}
print("点击立即订票按钮");
}
}
// 获取大麦网时间戳(可以根据实际需求调整)
function getDamaiTimestamp() {
return new Date().getTime();
}
// 将时间戳转换为时间字符串
function convertToTime(timestamp) {
var date = new Date(timestamp);
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
return hours + ":" + minutes + ":" + seconds;
}
// 停止一段时间(毫秒)
function sleep(millis) {
var start = new Date().getTime();
while (new Date().getTime() - start < millis) {}
}
// 刷新页面函数(实现方式可能需要根据具体APP调整)
function swipeRefresh() {
// 模拟下拉刷新动作
swipe(device.width / 2, device.height / 2, device.width / 2, device.height, 500);
sleep(1000); // 刷新等待时间
}
注意事项
- 测试脚本:在实际抢票之前,使用脚本进行多次测试,确保脚本可以稳定运行。
- 安全性:自动化操作可能被APP检测到并进行限制或封号处理,使用时要谨慎。
- 改进脚本:根据测试结果不断改进脚本,处理各种可能的异常情况,提高抢票成功率。
- 最最最重要:确保脚本仅用于个人学习和测试,不要用于非法用途。