编辑代码

// 检查无障碍服务是否已经启用,如果没有启用则跳转到无障碍服务启用界面,并等待无障碍服务启动;当无障碍服务启动后脚本会继续运行。
auto.waitFor();
// 打开猫眼app
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