auto.waitFor();
app.launchApp("猫眼");
openConsole();
console.setTitle("猫眼 go!", "#ff11ee00", 30);
main();
className("android.widget.TextView").text("确认").waitFor();
function getTicketPrice() {
var ticketPrice = rawInput("请输入票价关键字(按照默认格式)", "788");
if (ticketPrice == null || ticketPrice.trim() == '') {
alert("请输入票价信息!");
return getTicketPrice();
}
console.log("手动输入的票价信息:" + ticketPrice);
return ticketPrice;
}
function getSellTime() {
var sellTime = rawInput("请输入抢票时间(按照默认格式)", "03-01 20:00");
if (sellTime == null || sellTime.trim() == '') {
alert("请输入抢票时间!");
return getSellTime();
}
return sellTime;
}
function main() {
console.log("开始猫眼抢票!");
var preBook = text("已 预 约").findOne(2000);
var preBook2 = className("android.view.View").text("已填写").findOne(2000);
var isPreBook = preBook2 != null || preBook != null;
var playEtc;
var ticketPrice;
console.log("界面是否已预约:" + isPreBook);
var month;
var day;
var hour;
var minute;
var inputTime = getSellTime();
console.log("输入的抢票时间:" + inputTime);
var times = inputTime.split(" ");
var time1 = times[0];
var time2 = times[1];
var monthDay = time1.split("-");
month = monthDay[0] - 1;
day = monthDay[1];
var hourMinute = time2.split(":");
hour = hourMinute[0];
minute = hourMinute[1];
var year = new Date().getFullYear();
var second = 0;
var msecond = 0;
var startTimestamp = new Date(year, month, day, hour, minute, second, msecond).getTime();
startTimestamp = startTimestamp - 50;
var damaiTimestamp;
var startTime = convertToTime(startTimestamp);
console.log("开抢时间:", startTime);
console.log("等待开抢...");
while (true) {
damaiTimestamp = getDamaiTimestamp();
if (damaiTimestamp >= startTimestamp) break;
}
var realStartTime = getDamaiTimestamp();
console.log("冲啊!!!");
clickPurchaseButton();
className("android.widget.TextView").text("确认").findOne().click();
console.log("点击确认");
handlePaymentWithRetry(realStartTime);
}
function clickPurchaseButton() {
const buttonsToClick = [
"立即预订",
"立即购票",
"特惠购票"
];
while (true) {
let found = false;
buttonsToClick.forEach(btnText => {
const btn = className("android.widget.TextView").text(btnText).findOne(500);
if (btn) {
console.log("点击购票按钮:" + btnText);
btn.click();
found = true;
}
});
if (found) break;
sleep(200);
}
}
function handlePaymentWithRetry(realStartTime) {
let retryCount = 0;
const MAX_RETRY = 20;
while (retryCount < MAX_RETRY) {
if (handleErrorPrompt()) {
retryCount++;
continue;
}
if (tryClickPaymentButton()) {
console.log("✅ 支付流程完成");
return;
}
}
console.log("❌ 达到最大重试次数");
}
function handleErrorPrompt() {
const errorText = text("喵~当前人数太多啦,请返回重试");
if (errorText.exists()) {
console.log("⚠️ 检测到人数过多提示");
const backBtn = className("android.widget.TextView").text("返回").findOne(1000);
if (backBtn) {
console.log("点击返回按钮");
backBtn.click();
sleep(800);
const confirmBtn = className("android.widget.TextView").text("确认").findOne(2000);
if (confirmBtn) {
console.log("重新确认订单");
confirmBtn.click();
sleep(500);
}
return true;
}
}
return false;
}
function tryClickPaymentButton() {
const paymentBtn = className("android.widget.Button").findOne(500);
if (paymentBtn) {
console.log("点击立即支付");
paymentBtn.click();
sleep(100);
return false;
}
return !className("android.widget.Button").exists() &&
!text