永乐抢票-选场次票价人数

辅助购买大麦网演唱会门票

// ==UserScript==
// @name         永乐抢票-选场次票价人数
// @namespace    https://www.jwang0614.top/scripts
// @version      0.6
// @description  辅助购买大麦网演唱会门票
// @author       Olivia Wang
// @match        https://www.228.com.cn*
// @grant        none
// ==/UserScript==

(function() {
    //'use strict';
    // Your code here...
    if(!window.localStorage){
        alert('不支持这个浏览器,请换成Chrome或者Safari。');
        return null;
    }



    /****  改人数  ***/
    var people_num = 2;

    var storage = window.localStorage;
    storage.setItem("people_num", people_num);
    //storage.clear();

    var start = document.createElement("P");
    start.appendChild(document.createTextNode("开始抢票 (ctrl+E)"));
    start.style.lineheight="50px";
    start.style.color="white";
    start.style.fontSize="30px";
    start.style.padding="10px 20px";
    start.style.background="green";
    start.style.position="fixed";
    start.style.right="30px";
    start.style.top="100px";
    start.style.zIndex="10000";

    var stop = document.createElement("P");
    stop.appendChild(document.createTextNode("停止抢票 (ctrl+T)"));
    stop.style.lineheight="50px";
    stop.style.color="white";
    stop.style.fontSize="30px";
    stop.style.padding="10px 20px";
    stop.style.background="black";
    stop.style.position="fixed";
    stop.style.right="30px";
    stop.style.top="200px";
    stop.style.zIndex="10000";

    var notice = document.createElement("DIV");
    notice.style.color="white";
    notice.style.background="darkseagreen";
    notice.style.fontSize="20px";
    notice.style.padding="10px 20px";
    notice.style.position="fixed";
    notice.style.right="30px";
    notice.style.top="300px";
    notice.style.lineheight="30px";
    notice.style.zIndex = "10000";
    notice.style.width = "300px";
    var notice_0 = document.createElement("P");
    notice_0.appendChild(document.createTextNode("1.选择场次 2.选择价格 3.点击‘开始抢票’"));
    var notice_1 = document.createElement("P");
    notice_1.appendChild(document.createTextNode("当前选择人数:" + people_num + "人"));
    var notice_2 = document.createElement("P");
    notice_2.appendChild(document.createTextNode("如需改变请在脚本中修改people_num变量"));
    var notice_3 = document.createElement("P");
    notice_3.appendChild(document.createTextNode("请先登录,填写一个默认地址,输入"+ people_num+"个购票人"));
    var notice_4 = document.createElement("P");
    notice_4.appendChild(document.createTextNode("不支持选座"));
    var notice_5 = document.createElement("P");
    notice_5.appendChild(document.createTextNode("如果不是快递票不要忘了修改另一个脚本中姓名(contact)和电话(phone)的值。"));

    notice_0.style.color = "white";
    notice_0.style.background = "red";
    notice.appendChild(notice_0);

    notice.appendChild(notice_1);
    notice.appendChild(notice_2);


    notice_3.style.color = "red";
    notice_3.style.background = "white";
    notice.appendChild(notice_3);
    notice_4.style.color = "red";
    notice_4.style.background = "white";
    notice.appendChild(notice_4);

    notice_5.style.color = "white";
    notice_5.style.background = "red";
    notice.appendChild(notice_5);

    var container = document.querySelector('body');
    container.appendChild(start);
    container.appendChild(stop);
    container.appendChild(notice);


    reload_page();



    document.onkeydown = function() {

        var oEvent = window.event;
        if (oEvent.keyCode == 69 && oEvent.ctrlKey) {
            //alert("你按下了ctrl+E");
            // start
            start.click();
        }else if (oEvent.keyCode == 84 && oEvent.ctrlKey) {
            //alert("你按下了ctrl+T");
            // stop
            stop.click();
        }
    }

    function timedRefresh(timeoutPeriod) {
        window.setTimeout("location.reload(true);",timeoutPeriod);
    }


    start.onclick = function() {
        console.log('开始抢票!');
        //blinkStart();
        document.querySelector('body > div.perform').style.background="darksalmon";
        storage.setItem("isRunning", true);

        get_numbers_from_page();

        timedRefresh(1);

    };

    stop.onclick = function() {
        alert('停止抢票!');
        document.querySelector('body > div.perform').style.background="white";
        storage.setItem("isRunning", false);
        storage.removeItem("isRunning");
        storage.removeItem("price_ele_num");
        storage.removeItem("event_ele_num");
        storage.removeItem("people_num");
        storage.clear();

    };

    function sleep (time) {
        return new Promise((resolve) => setTimeout(resolve, time));
    }

    function set_up_check_page() {
        console.log("set up check page");

        var event_ele_num = storage.getItem("event_ele_num");
        var price_ele_num = storage.getItem("price_ele_num");
        var people_num = storage.getItem("people_num");

        if (storage.getItem("isRunning") == "true") {
            var perform_ele = document.querySelector('body > div.perform');
            if (perform_ele) {
                perform_ele.style.background="darksalmon";
            }
            
        }

        var event_selections = document.querySelectorAll('body > div.perform > div > div.flex1 > div.hd > div > div.order > div.perform__order__box > div.perform__order__select.perform__order__select__performs > div.select_right > .select_right_list > .select_right_list_item');



        event_selections[event_ele_num].click();
        console.log("event");

        sleep(200).then(() => {
            var price_selections = document.querySelectorAll('body > div.perform > div > div.flex1 > div.hd > div > div.order > div.perform__order__box > div.perform__desc__info + div > div.select_right > .select_right_list > .select_right_list_item');

            if (price_selections[price_ele_num]) {
                price_selections[price_ele_num].click();
                console.log("price");

                sleep(100).then(()=>{
                var people_selection = document.querySelector(".cafe-c-input-number-input");

                if (people_selection) {
                    var people_inc_btn = document.querySelector('a.cafe-c-input-number-handler.cafe-c-input-number-handler-up');
                    for (var i =1; i < people_num; i++) {
                        people_inc_btn.click();
                        console.log("inc");
                    }

                    sleep(50).then(()=>{
                        var btn = document.querySelector("body > div.perform > div > div.flex1 > div.hd > div > div.order > div.perform__order__box > div:last-child > div");
                        console.log(btn);
                        if (btn) {
                            if (btn.innerText == "立即购买" || btn.innerText == "立即预定") {
                                storage.removeItem("isRunning");
                                storage.removeItem("price_ele_num");
                                storage.removeItem("event_ele_num");
                                storage.removeItem("people_num");
                                storage.clear();
                                btn.click();
                            }
                        }

                    });


                }

                if (storage.getItem("isRunning") == "true") {
                    console.log("refreshing");
                    timedRefresh(0.001);
                }

            });


            } else {
                console.log("price_selections not found");
                timedRefresh(0.001);
            }



            


        });

        

    }

    function get_numbers_from_page() {
        var event_selections = document.querySelectorAll('body > div.perform > div > div.flex1 > div.hd > div > div.order > div.perform__order__box > div.perform__order__select.perform__order__select__performs > div.select_right > div > div');
        var price_selections = document.querySelectorAll('body > div.perform > div > div.flex1 > div.hd > div > div.order > div.perform__order__box > div.perform__desc__info + div > div.select_right > div > div');

        for (var i= 0;i < event_selections.length;i++) {
            if (event_selections[i].classList.contains("active")) {
                storage.setItem("event_ele_num", i);
                break;
            }
        }

        for (var j= 0;j < price_selections.length;j++) {
            if (price_selections[j].classList.contains("active")) {
                storage.setItem("price_ele_num", j);
                break;
            }
        }

    }

    function reload_page() {
        console.log("reload");
        //alert(storage.getItem("isRunning"));
        window.setTimeout(set_up_check_page,100);


    }



    

})();