【2024年了还抢不到演唱会门票?!Python制作【大麦网】抢票程序,看演唱会再也不怕没票了_python抢票】

前言

大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。

但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票。

在热门演出和活动的门票抢购大战中,许多粉丝和观众都面临着巨大的挑战。为了解决这个问题,我们精心研发了一款大麦网抢票工具,帮助您轻松应对抢票难题,实现快速、高效的购票体验。

这款大麦网抢票工具具有多项强大功能。首先,它能够实时监控票务系统的票源情况,一旦有票放出,立即启动自动抢票程序,确保您能够在第一时间成功购票。其次,工具支持多线路、多账号同时抢票,大大提高了抢票的成功率。此外,我们还提供了灵活的购票设置选项,您可以根据自己的需求选择座位、数量等参数,实现个性化抢票。

使用大麦网抢票工具,您将告别繁琐的手动操作,享受一键式抢票的便捷体验。您只需提前设置好抢票参数,等待工具自动为您完成抢票过程。在抢票过程中,您还可以随时查看抢票进度和结果,让您对抢票情况了如指掌。

我们深知抢票的不易,因此我们的抢票工具不仅功能强大,而且安全可靠。我们严格遵守相关法律法规和平台规定,确保您的账号和信息安全。同时,我们也提供了完善的客户服务和技术支持,确保您在使用过程中遇到任何问题都能得到及时解决。

那么,今天带大家用Python来制作一个自动抢票的脚本小程序

知识点:

  • 面向对象编程
  • selenium 操作浏览器
  • pickle 保存和读取Cookie实现免登陆
  • time 做延时操作
  • os 创建文件,判断文件是否存在

开发环境:

  • 版 本:anaconda5.2.0(python3.6.5)
  • 编辑器:pycharm

先导入本次所需的模块

import os
import time
import pickle
from time import sleep
from selenium import webdriver

第一步,实现免登录

确定目标,设置全局变量

# 大麦网主页
damai_url = "https://www.damai.cn/"
# 登录页
login_url = "https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F"
# 抢票目标页
target_url = 'https://detail.damai.cn/item.htm?spm=a2oeg.search_category.0.0.77f24d15RWgT4o&id=654534889506&clicktitle=%E5%A4%A7%E4%BC%97%E7

初始化加载

class Concert:
    def __init__(self):
        self.status = 0         # 状态,表示如今进行到何种程度
        self.login_method = 1   # {0:模拟登录,1:Cookie登录}自行选择登录方式
        self.driver = webdriver.Chrome(executable_path='chromedriver.exe')        # 默认Chrome浏览器

登录调用设置cookie

~~~python
def set_cookie(self):
    self.driver.get(damai_url)
    print("###请点击登录###")
    while self.driver.title.find('大麦网-全球演出赛事官方购票平台') != -1:
        sleep(1)
    print('###请扫码登录###')

    while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':
       sleep(1)
    print("###扫码成功###")
    pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))
    print("###Cookie保存成功###")
    self.driver.get(target_url)
~~~

获取cookie

~~~python
def get_cookie(self):
    try:
        cookies = pickle.load(open("cookies.pkl", "rb"))  # 载入cookie
        for cookie in cookies:
            cookie_dict = {
                'domain':'.damai.cn',  # 必须有,不然就是假登录
                'name': cookie.get('name'),
                'value': cookie.get('value')
            }
            self.driver.add_cookie(cookie_dict)
        print('###载入Cookie###')
    except Exception as e:
        print(e)
~~~

登录

    def login(self):
        if self.login_method==0:
            self.driver.get(login_url)                                
            # 载入登录界面
            print('###开始登录###')

        elif self.login_method==1:
            if not os.path.exists('cookies.pkl'):                     
            # 如果不存在cookie.pkl,就获取一下
                self.set_cookie()
            else:
                self.driver.get(target_url)
                self.get_cookie()

打开浏览器

def enter_concert(self):
    """打开浏览器"""
    print('###打开浏览器,进入大麦网###')
    # self.driver.maximize_window()           # 最大化窗口
    # 调用登陆
    self.login()                            # 先登录再说
    self.driver.refresh()                   # 刷新页面
    self.status = 2                         # 登录成功标识
    print("###登录成功###")
    # 后续德云社可以讲
    if self.isElementExist('/html/body/div[2]/div[2]/div/div/div[3]/div[2]'):
        self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div/div/div[3]/div[2]').click()

第二步,抢票并下单

判断元素是否存在

def isElementExist(self, element):
    flag = True
    browser = self.driver
    try:
        browser.find_element_by_xpath(element)
        return flag

    except:
        flag = False
        return flag

选票操作

def choose_ticket(self):
    if self.status == 2:                  #登录成功入口
        print("="*30)
        print("###开始进行日期及票价选择###")
        while self.driver.title.find('确认订单') == -1:           # 如果跳转到了订单结算界面就算这步成功了,否则继续执行此步
            try:
                buybutton = self.driver.find_element_by_class_name('buybtn').text
                if buybutton == "提交缺货登记":
                    # 改变现有状态
                    self.status=2
                    self.driver.get(target_url)
                    print('###抢票未开始,刷新等待开始###')
                    continue
                elif buybutton == "立即预定":
                    self.driver.find_element_by_class_name('buybtn').click()
                    # 改变现有状态
                    self.status = 3
                elif buybutton == "立即购买":
                    self.driver.find_element_by_class_name('buybtn').click()
                    # 改变现有状态
                    self.status = 4
                # 选座购买暂时无法完成自动化
                elif buybutton == "选座购买":
                    self.driver.find_element_by_class_name('buybtn').click()
                    self.status = 5
            except:
                print('###未跳转到订单结算界面###')
            title = self.driver.title
            if title == '选座购买':
                # 实现选座位购买的逻辑
                self.choice_seats()
            elif title == '确认订单':
                while True:
                    # 如果标题为确认订单
                    print('waiting ......')
                    if self.isElementExist('//*[@id="container"]/div/div[9]/button'):
                        self.check_order()
                        break

选择座位

    def choice_seats(self):
        while self.driver.title == '选座购买':
            while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[1]/div[2]/img'):
                # 座位手动选择 选中座位之后//*[@id="app"]/div[2]/div[2]/div[1]/div[2]/img 就会消失
                print('请快速的选择您的座位!!!')
            # 消失之后就会出现 //*[@id="app"]/div[2]/div[2]/div[2]/div
            while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[2]/div'):
                # 找到之后进行点击确认选座
                self.driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div[2]/button').click()

下单操作

def check_order(self):
    if self.status in [3,4,5]:
        print('###开始确认订单###')
        try:
            # 默认选第一个购票人信息
            self.driver.find_element_by_xpath('//*[@id="container"]/div/div[2]/div[2]/div[1]/div/label').click()
        except Exception as e:
            print("###购票人信息选中失败,自行查看元素位置###")
            print(e)
        # 最后一步提交订单
        time.sleep(0.5)  # 太快会影响加载,导致按钮点击无效
        self.driver.find_element_by_xpath('//div[@class = "w1200"]//div[2]//div//div[9]//button[1]').click()

抢票完成,退出

def finish(self):
    self.driver.quit()

最后我自己整理了一些学习资料,希望对你们有帮助。

Python学习大纲

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

入门学习视频

Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述
在这里插入图片描述
总之,大麦网抢票工具是您抢票路上的得力助手。它能够帮助您轻松应对抢票难题,实现快速、高效的购票体验。让我们一起期待下一次的演出和活动,用这款抢票工具为自己赢得一张宝贵的门票吧!

关注我,每天学习Python新技能!!

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
门票是一个需要高效和及时操作的过程,并且每个站的抢票机制都不尽相同。在大麦李荣浩演唱会门票时,你可以考虑以下步骤: 1. 络请求:使用 Python 的 requests 库发送 HTTP 请求,模拟用户在大麦上的操作。你需要找到演唱会的具体页面,并确定购票的 URL。 ```python import requests url = "https://www.damai.cn/xxx" # 替换为演唱会页面的 URL response = requests.get(url) ``` 2. 解析页面:使用 BeautifulSoup 或其他 HTML 解析库解析返回的 HTML 页面,找到购票按钮的位置和相关信息。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, "html.parser") button = soup.find("button", class_="buy-btn") # 根据购票按钮的类名或其他标识找到按钮元素 ``` 3. 提交订单:通过模拟点击购票按钮或提交购票表单,向服务器发送购票请求。 ```python ticket_id = button["data-ticket-id"] # 获取购票按钮上的票务 ID payload = {"ticket_id": ticket_id, "amount": 1} # 根据接口要求构建购票请求的参数 response = requests.post("https://www.damai.cn/submit_order", data=payload) ``` 4. 处理响应:根据返回的响应结果判断抢票是否成功,可以通过判断订单状态、错误提示等方式进行判断。 ```python if response.status_code == 200: if "抢票成功" in response.text: print("恭喜,抢票成功!") else: print("抢票失败,请检查错误提示。") else: print("抢票请求失败,请检查络连接或其他问题。") ``` 请注意,上述代码只是一个示例,具体的抢票逻辑可能会因为站的变化而有所调整。在实际操作中,你可能需要处理验证码、登录授权等问题,并进行适当的错误处理和重试机制。 此外,抢票行为可能会受到大麦的限制和反爬虫机制的影响,请确保你的行为符合大麦的规定和合法要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值