大麦抢票

学习分享

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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);
    });
    //判断当前页面为抢票页面


})();