最近,演唱会的举办越来越多,刚好我的一位同学喜欢听演唱会,就问我能不能帮他写一个自动抢演唱会门票的脚步,小编花了一个星期的时间研究和实践,成功写了一个简易版的自动抢票脚步。今天,我就分享一下我在写脚步中的过程体会给大家。

希望我的文章能给你带来帮助,如果能帮助到你,希望你能给小编点个赞和关注,你的赞是小编继续写作的动力(=^ ^=)

完整的源代码已经打包好了,文末可领取

保持会话方法

想要多次重复的进行自动化抢票,最主要的就是要解决每次都要登录的问题,因此每次登录的时候都需要以账号登录,想要每次都用账号登录,那必须使用登录后的cookie进行操作。

即:服务的$ _COOKIE函数中记录了你的cookie,那你就可以直接调用登录,如果没有就需要人工登录了,登录了之后,二次访问界面就能把自己的 cookie 保存到$_COOKIE函数。但是 cookie 登录存在问题,就是 cookie 涉及过期问题,所以可能隔一段时间就要手动重新登录进行cookie 保存了

登录账号:

    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()

获取cookie:

    def set_cookies(self):"""cookies: 登录网站时出现的 记录用户信息用的"""self.driver.get(damai_url)self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div[3]/div[1]/div[1]/span').click()iframe = self.driver.find_element(By.XPATH, '//div[@class="mui-zebra-module"]/div[1]/div[1]/div[1]/iframe')self.driver.switch_to.frame(iframe)self.driver.find_element(By.XPATH, '//*[@id="login-tabs"]/div[2]').click()self.driver.find_element(By.XPATH, '//*[@id="fm-sms-login-id"]').send_keys(self.number)self.driver.find_element(By.XPATH, '//*[@id="login-form"]/div[2]/div[3]/a').click()print("###请输入验证码###")while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':time.sleep(1)print("###登录成功###")pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb'))print("###cookie保存成功###")self.driver.get(target_url)

获取到cookie后就可以用这个cookie进行登录了

    def get_cookie(self):"""假如说本地有cookies.pkl 那么直接获取"""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###")

登录完成后就是抢票了,可以直接用selenium访问需要抢票的网址,然后进行抢票

    def choose_ticket(self):"""下单操作"""if self.status == 2:print('=' * 30)self.choose_num()print("###准备购买{}张票###".format(self.num))print('=' * 30)print('###正在进行抢票###')# self.choose_seats()while self.driver.title != '订单确认页':try:self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div[1]/div[1]/div/div[2]/div[4]/div[10]/div/div[3]/div[3]').click()# self.driver.refresh()except:print('###没有跳转到订单结算界面###')

完整代码:

import time,os
import pickle
from selenium import webdriver
from selenium.webdriver.common.by import By# 大麦网主页
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?id=710818567651'class Concert:def __init__(self):self.number = '13371533785'   # 登录需要的手机号self.num = 1  # 需要抢的票数self.name = '小陈'self.status = 0  # 状态,表示当前操作执行到了哪个步骤self.login_method = 1  # {0:模拟登录, 1:cookie登录}自行选择登录的方式self.options = webdriver.ChromeOptions()# 隐藏"Chrome正在受到自动软件的控制"self.options.add_experimental_option('useAutomationExtension', False)  # 去掉开发者警告self.options.add_experimental_option('excludeSwitches', ['enable-automation'])self.options.add_argument('--disable-blink-features=AutomationControlled')self.driver = webdriver.Chrome(options=self.options)    # 当前浏览器对象def enter_concert(self):"""打开浏览器"""print('###打开浏览器,进入大麦网###')# 调用登录self.login()# self.driver.refresh()  # 刷新页面self.status = 2  # 登录成功标识print("###登录成功###")def get_cookie(self):"""假如说本地有cookies.pkl 那么直接获取"""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###")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()def set_cookies(self):"""cookies: 登录网站时出现的 记录用户信息用的"""self.driver.get(damai_url)self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div[3]/div[1]/div[1]/span').click()iframe = self.driver.find_element(By.XPATH, '//div[@class="mui-zebra-module"]/div[1]/div[1]/div[1]/iframe')self.driver.switch_to.frame(iframe)self.driver.find_element(By.XPATH, '//*[@id="login-tabs"]/div[2]').click()self.driver.find_element(By.XPATH, '//*[@id="fm-sms-login-id"]').send_keys(self.number)self.driver.find_element(By.XPATH, '//*[@id="login-form"]/div[2]/div[3]/a').click()print("###请输入验证码###")while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':time.sleep(1)print("###登录成功###")pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb'))print("###cookie保存成功###")self.driver.get(target_url)def choose_num(self):for i in range(1, self.num):self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div[1]/div[1]/div/div[2]/div[3]/div[6]/div[2]/div/div/a[2]').click()def choose_ticket(self):"""下单操作"""if self.status == 2:print('=' * 30)self.choose_num()print("###准备购买{}张票###".format(self.num))print('=' * 30)print('###正在进行抢票###')while self.driver.title != '订单确认页':try:self.driver.find_element(By.XPATH, '/html/body/div[2]/div/div[1]/div[1]/div/div[2]/div[4]/div[10]/div/div[3]/div[3]').click()except:print('###没有跳转到订单结算界面###')def finifsh(self):"""结束,退出浏览器"""self.driver.quit()if __name__ == '__main__':concert = Concert()try:concert.enter_concert()  # 打开浏览器concert.choose_ticket()  # 抢票except Exception as e:print(e)concert.finifsh()

大麦网抢票源代码已打包,同时小编为大家准备了运行源码的工具,包括python、pycharm安装教程,需要的伙伴可以扫描下方二维码领取

读者福利

小编是一名Python开发工程师,自己整理了一套最新的Python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,这份【最新全套Python学习资料】 一定对你有用!

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的!

1、学习时间相对较短,学习内容更全面更集中

2、可以找到适合自己的学习方案

最新Python入门必备资料可扫描文中或文末的二维码,赠送给需要学习python的小伙伴,希望可以帮助少走一些弯路~

1、Python所有方向的学习路线

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

2、Python课程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

3、精品书籍

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

4、清华编程大佬出品《漫画看学Python》

用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。

5、Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

6、互联网企业面试真题

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

这份完整版的Python全套学习资料已经上传至CSDN官方,朋友们如果需要可以点击下方链接扫描下方二v码都可以免费获取【保证100%免费】

最新全套【Python入门到进阶资料 & 实战源码 &安装工具】

以上全套资料已经为大家打包准备好了,希望对正在学习Python的你有所帮助!

如果你觉得这篇文章有帮助,可以点个赞呀~

我会坚持每天更新Python相关干货,分享自己的学习经验帮助想学习Python的朋友们少走弯路!

Python自动化 —— 大麦网自动抢购原价演唱会门票相关推荐

  1. 【大麦网抢票】演唱会门票还能这样抢?看这里!我用Python实现了大麦网原价秒杀门票功能

    相信想去周董演唱会的大家都用过大麦网抢票吧? 可是-抢不到啊!!! 该说不说 我抢到了 那么,今天带大家用Python来制作一个自动抢票的脚本小程序! 知识点: 面向对象编程 selenium 操作浏 ...

  2. Python 自动化教程(5) : 自动生成Word文件

    系列教程: Python 自动化教程(1) 概述,第一篇 Excel自动化 Python 自动化教程(2) : Excel自动化:使用pandas库 Python 自动化教程(3) : 自动生成PPT ...

  3. Python 自动化教程(4) : 自动生成PPT文件 Part 2 (干货)

    系列教程: Python 自动化教程(1) 概述,第一篇 Excel自动化 Python 自动化教程(2) : Excel自动化:使用pandas库 Python 自动化教程(3) : 自动生成PPT ...

  4. 周杰伦演唱会门票还能这样抢?看过来!我用Python实现了大麦网自动抢票功能

    相信想去周董演唱会的大家都用过大麦网抢票吧? 可是-抢不到啊!!! 该说不说 我抢到了 那么,今天带大家用Python来制作一个自动抢票的脚本小程序! 知识点: 面向对象编程 selenium 操作浏 ...

  5. Python selenium 实现大麦网自动抢票,简单的实现全购票过程

    前言 大麦网是中国综合类现场娱乐票务营销平台,业务覆盖演唱会. 话剧.音乐剧.体育赛事等领域 今天,我们要用代码来实现他的购票过程 先来看看完成后的效果是怎么样的 开发环境 版 本:anaconda( ...

  6. 基于Python和Selenium的大麦网自动抢票脚本

    自动化抢票的脚本,需通过Selenium库来实现自动化操作.(学习参考) # 导入必要的库 from selenium import webdriver from selenium.webdriver ...

  7. 用Python做一个抢票脚本,演唱会门票轻松到手!

    最近演唱会还挺多的,都是大家喜欢的那些知名歌手,所以特地出一手教程给大家助力(主要是 表弟想追女神,所以教他自己抢票) 知识点 selenium 淘宝滑块处理 抢购逻辑实现 必备环境 python 3 ...

  8. 永远抢不到原价演唱会门票?来试试窗口同步功能吧

    自从疫情放开以来,越来越多演出也开始恢复.别看龙哥平时只爱和大家分享跨境电商,其实私底下龙哥也是个演出迷,基本上国内比较红的歌手龙哥都会去.不过龙哥从来不买黄牛票,一是觉得没必要,龙哥只是听个响:二是 ...

  9. python自动化代码生成_python 自动生成C++代码 (代码生成器)

    Python代码自动生成方法(代码生成器)遇到这种事在工作遇到问题,你需要写很多c++基础数据库类,但这些类是一样的,只不过是添加,删除,修改并检查.如果你手动编写代码,它是费力而容易出错;它可以很容 ...

最新文章

  1. PHP中include和require
  2. spring冲刺第一天
  3. 扩有mysql的磁盘_为提高MySQL性能而在磁盘IO方面的设置
  4. unix基础之改变文件权限
  5. android 判断app处于前后台
  6. 解题:洛谷3402 可持久化并查集
  7. 在Docker Swarm上部署Apache Storm:第1部分
  8. 用计算机修改图片或照片,【如何更改图片像素】电脑上如何改照片像素
  9. 系统命令联网激活方法
  10. iOS(iPhone,iPad))开发(Objective-C)开发库常用库索引
  11. 2019学位计算机模拟试题,2019年下半年成人学位英语模拟试题1
  12. Unity 4.6.2 iOS 64位支持
  13. new joiner
  14. python快手爬虫:解决粉丝数、 关注数等字体加密
  15. 用脑子说话,用心服务
  16. MoG EM-Algorithm
  17. uniapp组件-uni-fav收藏按钮
  18. 词向量方法分析《三体》
  19. eclipse 找不到configure working sets选项
  20. 共享单车MATLAB建模,数学建模共享单车论文.pdf

热门文章

  1. 《杜拉拉升职记》读后感
  2. swft入门学习-第一天
  3. 远程桌面的内容无法复制粘贴到本地的解决办法
  4. 阿里P9李运华:想成为架构师,你必须知道CAP理论
  5. 2023年第十六届“认证杯”数学中国数学建模网络挑战赛
  6. C# 反射(Reflection)
  7. 最新智能手机数据出炉!全球2.5亿支产量,OPPO市占率全球第三!
  8. 火狐浏览器显示服务器超时,Firefox为什么有时会出现警告说连接超时
  9. c语言:单片机除法求余算法
  10. 教室录播系统方案_校园录播教室搭建解决方案 中小学录播教室建设方案