我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【大麦网自动抢票】100%秒杀出票 不成功我退出编程圈!

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【大麦网自动抢票】100%秒杀出票 不成功我退出编程圈!

目录

前言

大麦网是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域 今天,我们要用代码来实现他的购票过程

先来看看完成后的效果是怎么样的

在这里插入图片描述

开发环境

  • 版 本:anaconda(python3.8.8)
  • 编辑器:pycharm

代码实现步骤

  • 实现免登陆
  • 选座并且下单

实现免登陆

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.6ee64d156yMCV9&id=672706937093&clicktitle=%E7%95%99%E5%A3%B0%E7%8E%A9%E5%85%B72022%E3%80%8C%E6%97%B6%E9%97%B4%E7%9A%84%E8%B7%A8%E5%BA%A6%E3%80%8D%E5%B7%A1%E6%BC%94Vol%C2%B71%20%E9%95%BF%E6%B2%99%E7%AB%99'

初始化加载

from selenium import webdriver  # 操作浏览器的工具def __init__(self):    self.status = 0   # 状态, 表示当前操作执行到了哪个步骤    self.login_method = 1  # {0:模拟登录, 1:cookie登录}自行选择登录的方式    self.driver = webdriver.Chrome(executable_path='chromedriver.exe')  # 当前浏览器驱动对象

登录

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'):            self.set_cookies()             # 没有文件的情况下, 登录一下        else:            self.driver.get(target_url)  # 跳转到抢票页            self.get_cookie()           # 并且登录

cookies: 登录网站时出现的

import time       def set_cookies(self):    self.driver.get(damai_url)    print('###请点击登录###')    # 我没有点击登录,就会一直延时在首页, 不会进行跳转    while self.driver.title.find('大麦网-全球演出赛事官方购票平台') != -1:        sleep(1)    print('###请扫码登录###')    # 没有登录成功    while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':        sleep(1)    print('###扫码成功###')    # get_cookies: driver里面的方法    pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb'))    print('###cookie保存成功###')    self.driver.get(target_url)

假如说我现在本地有 cookies.[pkl]

def get_cookie(self):    cookies = pickle.load(open('cookies.pkl', 'rb'))    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###')

运行代码可以得到所需要的cookis,这样就可以实现免登录

在这里插入图片描述

打开浏览器

def enter_concert(self):    print('###打开浏览器,进入大麦网###')    # 调用登录    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 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)  # 刷新页面 继续执行操作                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('正在加载.......')                    # 如果当前购票人信息存在 就点击                    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'):            print('请快速选择你想要的座位!!!')        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('//*[@id="container"]/div/div[9]/button').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 finish(self):    self.driver.quit()

来源地址:https://blog.csdn.net/XM67_/article/details/131562382

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【大麦网自动抢票】100%秒杀出票 不成功我退出编程圈!

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录