相信想去周董演唱会的大家都用过大麦网抢票吧?

可是

抢不到啊


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

那么,今天带大家用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

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"))  # 载入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()

测试代码是否成功

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

最后看下效果如何


对于本篇文章有疑问的同学也可以点这里

周董演唱会为什么总是抢不到票?教你用Python做一个自动抢票脚本相关推荐

  1. 周杰伦演唱会总是抢不到票?教你用Python做一个自动抢票脚本!

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

  2. 周杰伦演唱会总是抢不到票?教你用Python做一个自动抢票脚本

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

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

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

  4. 【python实战】拒绝黄牛!我要用python原价冲周董演唱会~Python自动秒杀抢票脚本

    前言 大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会. 话剧.音乐剧.体育赛事等领域. 但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票 那么,今天带大家用Python ...

  5. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  6. 如何写一个自动抢微信红包的程序

    春节临近,为避免错失土豪们的红包,动手写了一个自动抢微信红包的小程序,试了一下效果还不错.本程序适用于安卓4.1版本以上手机,不需要ROOT权限.现将程序的设计要点记录如下,供有兴趣的同行参考. 一. ...

  7. python抢券代码_抢券抢不到生气了,准备写一个自动抢券的东东,时间成本最低的 web 方案是什么?...

    京东 199-150 的牛奶券,昨天晚上 400 多人兑换,今天 720 人,也不知道什么时候放的券,说好 10 点放,结果点了 5 分钟也没有影,生气了,准备写一个自动抢券机,需求就是填入从 Chr ...

  8. python 抢券_抢券抢不到生气了,准备写一个自动抢券的东东,时间成本最低的 web 方案是什么?...

    京东 199-150 的牛奶券,昨天晚上 400 多人兑换,今天 720 人,也不知道什么时候放的券,说好 10 点放,结果点了 5 分钟也没有影,生气了,准备写一个自动抢券机,需求就是填入从 Chr ...

  9. python必背100源代码-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  10. 12306订票候补是个坑_12306实现自动抢票了,候补购票功能在哪里,怎么用?

    2019年春运火车票已于2018年12月23日正式开售,你在为一年一度的抢票大战感到慌张吗?以往每到春运期间,网络上总会出现很多抢票软件,这些抢票工具有真有假难以辨认.今年12306官方推出了&quo ...

最新文章

  1. Android-TCPDump for Android(抓TCP数据包工具)
  2. 从Powershell 入侵脚本学到的如何执行后台runspace~
  3. 交换机接口的access与trunk
  4. Redis集群~StackExchange.redis连接Twemproxy代理服务器
  5. oracle segment undo_71_UNDO扩展学习
  6. 为什么长视频没有强算法推荐的产品
  7. 【项目管理】项目管理的三项约束
  8. thinkphp调用mysql存储过程_ThinkPHP执行调用存储过程怎么添加日志
  9. vagrant 网络三种模式
  10. HAWQ取代传统数仓实践(一)——为什么选择HAWQ
  11. 07到09程序员对自己工资的态度···
  12. PreferenceScreen移除菜单项
  13. EasyBoot常用的命令
  14. 托管服务器ip绑定域名_如何在一台服务器上托管多个域名和项目
  15. 多年来被互联网深深洗脑
  16. 计算机基础与知识点总结,计算机基础知识点总结
  17. Python温度转换程序
  18. 三维重建方法--激光or视觉
  19. 利用油猴脚本显示扇贝网真实打卡日记
  20. 6个有效激励合作伙伴和促进推荐的小技巧

热门文章

  1. WCDMA物理层--信道整体结构流程
  2. 洛谷p5369[PKUSC2018]最大前缀和
  3. 【Matlab综合设计】开环Buck-Boost升压-降压式变换器Simulink仿真(含仿真模块选择和参数计算过程)
  4. 奇异矩阵及广义逆矩阵
  5. 北京智能机器人为游客指路;日本研发出可识别背影的人工智能
  6. android系统解锁,android 调用系统解锁方法
  7. 利用第三方软件识别图片文字并转换为文本
  8. python如何筛选数据_Python如何用filter函数筛选数据
  9. t’触发器真值表和状态方程_T触发器的特性方程是
  10. 图像检索:颜色聚合向量(CCV)及matlab实现