iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本
  • 836
分享到

想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本

udppython网络 2023-08-31 11:08:56 836人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

前言 嗨喽!大家好,这里是魔王!! 大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。 但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票

前言

嗨喽!大家好,这里是魔王!!

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

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

那么,今天带大家用python来制作一个自动抢票的脚本小程序
请添加图片描述

此次知识点:

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

开发环境:

Python安装包 安装教程视频

pycharm 社区版 专业版 及 激活码

视频教程私我领取

第三方库:

  • selenium >>> pip install selenium==3.4.1

步骤

  1. 实现免登陆
    第一次登陆的时候 会帮助我记录我们的登陆信息
    set_cookie 登陆成功之后 cookie会发生变化
    后续抢票: 直接使用我们记录好的登陆信息
    get_cookie

  2. 抢票并且下单

请添加图片描述

首先导入本次所需的模块

from selenium import WEBdriver  # 操作谷歌浏览器 需要额外安装的 并且现在安装这个模块得指定版本 3.4from time import sleepimport pickle  # 保存和读取cookie实现免登录的工具import os   # 操作文件的模块

第一步,实现免登录

确定目标,设置全局变量

# 大麦网主页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

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

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):![请添加图片描述](https://img-blog.csdnimg.cn/4a0b661782e24b8ebf46390fb2333452.gif)    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()

测试代码

if __name__ == '__main__':    try:        con = Concert()             # 具体如果填写请查看类中的初始化函数        con.enter_concert()         # 打开浏览器        con.choose_ticket()         # 开始抢票    except Exception as e:        print(e)        con.finish()

效果

请添加图片描述
好了,我的这篇文章写到这里就结束啦!

希望你在python这条路上依心而行,别回头,别四顾。一如既往不改初见的模样,未来的路很长,不管怎样,一定要相信自己一直走下去。

有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง

喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!
请添加图片描述

来源地址:https://blog.csdn.net/python56123/article/details/121516459

--结束END--

本文标题: 想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本

本文链接: https://www.lsjlt.com/news/385525.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作