Greasy Fork is available in English.

大麦抢票

学习分享

// ==UserScript==
// @name         大麦抢票
// @version      2024-03-14(加了人数)
// @description  学习分享
// @author       ysq
// @license       MIT
// @match        https://www.damai.cn/*
// @match        https://m.damai.cn/shows/*
// @match        https://m.damai.cn/app/*
// @match        https://detail.damai.cn/*
// @match        https://www.damai.cn/*
// @icon         https://img.alicdn.com/tfs/TB1RxAHSmrqK1RjSZK9XXXyypXa-16-16.ico
// @run-at document-end
// @namespace https://greasyfork.org/users/1272145
// ==/UserScript==

(function() {
    'use strict';


    // 延迟执行的操作
    function delayedOperation() {
        var items = document.querySelectorAll('.select_right_list_item.sku_item');

        console.log(items);
        if (items.length >0) {
            alert('注意提前登录账号,提前设定买票人');
            var target = [];
            var selectedTexts = [];

            items.forEach(function(item) {
                selectedTexts.push(item.textContent);
            });

            var screenWidth = window.innerWidth;
            var screenHeight = window.innerHeight;

            var popupWidth = 400;
            var popupHeight = 400;

            var popupLeft = (screenWidth - popupWidth) / 2;
            var popupTop = (screenHeight - popupHeight) / 2;

            var popup = window.open('', 'popup', 'width=' + popupWidth + ',height=' + popupHeight + ',left=' + popupLeft + ',top=' + popupTop);

            popup.document.write('<h2>票价/人数选择:</h2>');
            selectedTexts.forEach(function(text) {
                popup.document.write('<input type="checkbox" value="' + text + '"> ' + text + '<br>');
            });
            // 写入人数选择下拉框
            popup.document.write('<label for="peopleCount">选择人数:</label>');
            popup.document.write('<select id="peopleCount" name="peopleCount">');

            // 假设您有一个包含人数选项的数组
            var peopleCount
            var availablePeopleCounts = [1, 2, 3, 4, 5];
            availablePeopleCounts.forEach(function(count) {
                popup.document.write('<option value="' + count + '">' + count + '人</option>');
            });

            popup.document.write('</select>');
            popup.document.write('<br><button onclick="confirmSelection()">确定</button>');
            var selectedItems = [];

            popup.confirmSelection = function() {
                var checkboxes = popup.document.querySelectorAll('input[type="checkbox"]:checked');
                var selectedCount = popup.document.getElementById("peopleCount").value;
                console.log("人数",selectedCount)
                checkboxes.forEach(function(checkbox) {
                    selectedItems.push(checkbox.value);
                });

                console.log(selectedItems);
                popup.close();

                selectedItems.forEach(function(selectedText) {
                    items.forEach(function(item) {
                        if (item.textContent.includes(selectedText)) {
                            target.push(item);
                        }
                    });
                    var currentIndex = 0;
                    let i = 1;
                    target[currentIndex].click();

                    var consoleOutput = [];

                    function clickItems() {
                        if (currentIndex < target.length) {
                            target[currentIndex].click();
                            var t=document.querySelector('a.cafe-c-input-number-handler.cafe-c-input-number-handler-up');
                            if(t){
                                for (let j = 0; j < selectedCount-1; j++) {
                               t.click();
                            }}
                            var buyLink = document.querySelector('div.buy-link');

                            if (buyLink) {
                                var message1 = '有票了!!!!!!!! ' ;
                                consoleOutput.push(message1);
                                console.log(message1);
                                buyLink.click();
                            }
                            currentIndex++;
                        } else {
                            var message = "第" + i + "次抢....";
                            consoleOutput.push(message);
                            console.log(message);
                            currentIndex = 0;
                            i++;
                        }
                    }

                    setInterval(clickItems, 200);

                    var consoleWindow = window.open('', 'consoleWindow', 'width=600,height=400');
                    consoleWindow.document.write('<h2>抢票信息</h2><div id="consoleOutput"></div>');

                    function updateConsoleOutput() {
                        var consoleOutputDiv = consoleWindow.document.getElementById('consoleOutput');
                        if (consoleOutput.length > 0) {
                            consoleOutputDiv.innerHTML = consoleOutput[consoleOutput.length - 1];
                        }
                    }


                    setInterval(updateConsoleOutput, 100);

                });
            };
        }
        else{
            //提交订单页面一以及选择“继续浏览器付款”
            var iconfonts= document.querySelectorAll('.iconfont.icondanxuan-weixuan_');
            iconfonts.forEach(function(iconfont){
                iconfont.click();
            });
            const allSpans = document.getElementsByTagName('span');
            var mouseDownEvent = new MouseEvent('mousedown', {
                'view': null,
                'bubbles': true,
                'cancelable': true
            });
            var mouseUpEvent = new MouseEvent('mouseup', {
                'view': null,
                'bubbles': true,
                'cancelable': true
            });

            // 循环遍历每个<span>标签
            for (let i = 0,j=0; i < allSpans.length; i++,j++) {
                // 判断<span>标签中的文本内容是否包含"提交订单"
                if (allSpans[i].textContent.includes("提交订单") || allSpans[i].textContent.includes("继续浏览器付款") || allSpans[j].textContent.includes("下一步")) {
                    // 点击包含"提交订单"文本信息的<span>标签
                    allSpans[i].dispatchEvent(mouseDownEvent);
                    allSpans[i].dispatchEvent(mouseUpEvent);
                }
            }

        }

    }
    // 在页面加载完成后延迟执行操作
    window.addEventListener('load', function() {
        setTimeout(delayedOperation, 500);
    });
    //判断当前页面为抢票页面


})();