Python制作【大麦网】抢票程序,看演唱会再也不怕没票了

article/2025/8/22 9:04:37

前言

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

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

那么,今天带大家用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"))  # 载入cookiefor 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 = Truebrowser = self.drivertry:browser.find_element_by_xpath(element)return flagexcept:flag = Falsereturn 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').textif buybutton == "提交缺货登记":# 改变现有状态self.status=2self.driver.get(target_url)print('###抢票未开始,刷新等待开始###')continueelif buybutton == "立即预定":self.driver.find_element_by_class_name('buybtn').click()# 改变现有状态self.status = 3elif 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 = 5except:print('###未跳转到订单结算界面###')title = self.driver.titleif 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]/divwhile 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()

有详细的配套教程以及源码,都已经打包好上传到百度云了,链接在文章结尾处!
需要可以微信扫描下方CSDN官方认证二维码免费领取

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

点此免费领取:CSDN大礼包:《python学习路线&全套学习资料》免费分享

Python学习大纲

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

入门学习视频

Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述
在这里插入图片描述
最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。


http://chatgpt.dhexx.cn/article/QvDpH69p.shtml

相关文章

Python抢票工具

春节抢票正在如火如荼的进行,过年回家那肯定需要抢票,每年的抢票大战,都是一场硬战,没有一个好工具,怎么能上战场死锁呢。今天小编推荐一个Python抢票工具,送到了GitHub趋势榜第一: 项目名很干脆…

微信小程序抢票脚本

但凡可以使用接口直接进行抢票的,都是基于小程序安全系数较低的情况下 所有加密,使用的数据都写在接口里 奥体整个后台也进行了重构,这套代码也使用不了了 现在的加密方式,完全看不懂 例: 这种加密没源码,…

【Android】基于Airtest实现大麦网app自动抢票程序

0x01 缘起 疫情结束的2023年5月,大家对出去玩都有点疯狂,歌手们也扎堆开演唱会。但演唱会多,票一点也不好抢,抢五月天的门票难度不亚于买五一的高铁票。所以想尝试找一些脚本来辅助抢票,之前经常用selenium和request做一些小爬虫来搞定自动化的工作,所以在 MakiNaruto/A…

12306火车票抢票Python代码最新完整版发布,五一抢票就靠它了!

语言版本:Python 1、自动登录12306并保持Cookie 2、自动实现抢购设置的某日期的某车次的票 3、攻克排队系统陷阱,避免进入排队系统 4、循环监控某车次的票,直到有票,自动抢购 5、抢票时若出现异常,自动重新抢票&a…

Python:基于Python爬虫技术的抢票程序及其实现

临近放假,相信我们每天都在群聊里或者朋友圈看到一些帮忙抢火车票的信息。看到朋友们抢回家的车票这么辛(bei)苦(can),结合圈里一些前辈的指点,抱着学习的心态用Python做了一个简单的自动化抢票程序,抢到票之后通过绑定的邮箱&…

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

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

大麦演唱会为什么总抢不到票?抢票完整教程、详细步骤

文章目录 1.在浏览器上安装脚本管理器 1.登录网址Tampermonkey • Home 2.选择对应浏览器的版本,并安装。 这里以edge浏览器作为示范​编辑 2.在油猴脚本管理器中搜索脚本 2.1注意右上角的更新,点击获取新脚本。 2.2 在此页面搜索“大麦抢票” 3.安…

程序员的我是如何抢票的(Python)

马上就要回家过年了,你的票买好了吗。 虽然我不用抢票,但是还是研究了一下怎么抢票。 程序员嘛,就是要对一切问题进行解构,探索原理本质,寻找规律,将其自动化。。。 好了,言归正传,开…

12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(上)

郑重声明: 本文仅供学习使用,禁止用于非法用途,否则后果自负,如有侵权,烦请告知删除,谢谢合作! 开篇明义 本文针对自主开发的抢票脚本在抢票过程中常常遇到的请求无效等问题,简单分析了 12306 网站的前端加密算法,更准确的说,是探究 RAIL_DEVICEID 的生成过程. 因为该 cookie…

技术宅---我的网上抢火车票攻略

写在前面 写这篇文章的起因是今天在12306上买火车票时,被这牛逼的网站给震撼到了,靠,牛叉得让人无语的用户体验啊。就讲讲我是如何利用一个小工具做辅助,幸运地抢到了回家的卧铺票的。希望能给有需要的兄弟们做个参考。 回顾下我今…

初学者怎么学java编程 ,小白们看过来吧

推荐一个java《学习》交流 群523401738每天晚上都有一个Java技术学习课,会有老师分享干货,帮助大家分析解答问题 一、java分为三大方向: CS架构(java se)。BS架构(java web)。java手机开发(java me&#…

自学 Java 怎么入门?

自学会碰到的问题 自学可以省不少的钱, 可是自学会碰到很多问题。 我再自学的过程中找到了一个Java自学的网站(Java全栈工程师 | 以实例驱动学习 | how2j.cn),试图解决一些自学中会碰到的问题。 1. 框架、思路、原理 一下子涌进来太多,弄不明…

Java 技术新手入门

Java 技术新手入门 什么是 Java 技术?Java 技术为什么重要?什么是 Java 组件技术?Java 技术如何与 Web 服务联系起来?如何提高 Java 编程技巧?Java 编程人员可以使用哪些 IBM 工具和产品? developerWorks J…

java基础编程入门教程,2022最新

Java学习到什么程度可以找第一份工作自己买了本Java从入门到精通。以为可以很快地学完,非CS专业。现在我想说所有系列的从入门到精通都是垃圾,一年多来,我每天白天看视频,晚上敲代码到凌晨,我是一个很倔的人,我认为天下没有任何东西是人类学不会的,所以我就付出高三一样的时间去…

新手小白入门编程第3讲 JAVA入门案例

1 HelloWorld案例 1.1 工作空间设置 工作空间就是一个文件夹,用来保存我们所有的开发文件和代码等等. 工作空间也是可以切换的,但是切换了工作空间,我们对于eclipse的设置就重置了. 后续我们自己写的代码可以去这个位置找到.可以如下图,选择工作空间的存放目录 1.2 eclipse…

Java编程学习入门、Java语言学习、Java入门必看

一、初识Java 1.生活中的程序: 从起床到教室上课的过程 穿衣打扮》起床》洗漱》出宿舍》》吃早餐》到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 2.计算机中的程序: 一组有序指令的集合,需要和计算机交流就要使用计算机语言,ja…

关于1970年之前的时间要怎么转换成时间戳啊 负数要怎么处理

在这里有的人可能有疑问? 大家都知道java时间戳是从1970年1月1日0时0分0秒开始计算的,那么假如1960年的时间戳应该是多少呢? 下面是答案,负数,通过负数一样可以转化成正常的时间 年月日。 -3026880001960-05-30 00:00

moment.JS时间戳转换总是1970年问题

把时间戳 ✖1000 即可解决 例子moment(date * 1000).format(‘YYYY-MM-DD’); 还可以这样

mysql查询1970年以后出生的人_阴阳五行分析:1970年出生的人是什么命?

农历1970年出生的人属狗,此年出生的人不应好高骛远,把握当下幸福的生活。我们常说“听天由命”,所谓的命运早就已经刻画在了你的五行中,五行算命也就有迹可循。 那么,本期一起来看看1970年出生的人是什么命&#xff1f…

mysql 日期 1970_Mysql中处理1970年前的日期(unixtime为负数的情况)负数时间戳格式化...

客户扔过来一个bug,说是一个系统中对42岁以上的人的统计不正确,而41岁以下的人没有问题。眼睛瞟了一下托盘区里的日期,2012年3月26日,嗯,今年42岁的话,那么应该就是出生在1970年左右,马上就把问…