源代码

# author:import configparser
from datetime import datetime
import os
import pickle
from selenium import webdriver
import time"""
1. 由于可能票源紧张,本程序默认抢购一张
2. 程序启动之前,先同步下电脑的时间,避免本地和网络时间相差较大
"""
# cfg = configparser.ConfigParser()
cfg = configparser.RawConfigParser()
conf_path = "./config.conf"
cfg.read([conf_path], encoding='utf-8')class Book_Ticket(object):def __init__(self):# 首页urlself.damai_url = "https://www.damai.cn/"# 登录界面self.login_url = "https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F"# 购票界面urlself.book_url = cfg.get("ticket_info", "book_url").strip()self.price_list = cfg.get("ticket_info", "price").strip().split(",")  # 抢票的价格挡位,从左向右self.price = list(map(int, self.price_list))self.name_num = int(cfg.get("ticket_info", "name_num").strip())  # 在订单界面选择给第几个实名用户购买,默认给第一个用户购买self.driver_path = cfg.get("other", "driver_path").strip()self.status = 0  # 是否登录的状态 0是未登录,1是登录self.current_num = 1  # 当前抢票第几次self.num = int(cfg.get("ticket_info", "num").strip())  # 抢票总次数self.datetime = cfg.get("ticket_info", "date_time").strip()  # 抢票时间点self.rush_time = time.strptime(self.datetime, '%Y-%m-%d %H:%M:%S')# 设置无头浏览器 无界面浏览器self.chrome_options = webdriver.ChromeOptions()self.chrome_options.add_argument('--headless')self.chrome_options.add_argument('--disable-gpu')# self.driver = webdriver.Chrome(executable_path=self.driver_path, options=self.chrome_options)  # 此项稳定版打开self.driver = webdriver.Chrome(executable_path=self.driver_path)  # 默认谷歌浏览器, 指定下驱动的位置# self.driver = webdriver.Chrome()  # 默认谷歌浏览器self.driver.maximize_window()def get_cookie(self):try:# 先进入登录页面进行登录print("------开始登录------")self.driver.get(self.login_url)# time.sleep(2)  # 不加好像也可以self.driver.switch_to.frame(0)login_methods = self.driver.find_elements_by_class_name("login-tabs-tab")login_methods[2].click()print("------请扫码------")# while self.driver.title != '大麦登录':#     time.sleep(0.5)while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':time.sleep(1)print("------扫码成功------")pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))print("------Cookie保存成功------")except Exception as e:raise edef set_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'),"expires": "",'path': '/','httpOnly': False,'HostOnly': False,'Secure': False}self.driver.add_cookie(cookie_dict)print('------载入Cookie------')except Exception as e:print("------cookie 设置失败,原因:%s------" % str(e))def login(self):if not os.path.exists('cookies.pkl'):  # 如果不存在cookie.pkl,就登录获取一下self.get_cookie()else:  # 存在就设置下cookieself.driver.get(self.damai_url)self.set_cookie()def select_price(self):try:"""选择票价挡位:return: """price_list = self.driver.find_elements_by_xpath("//div[@class='select_right_list']/div")  # 根据优先级选择一个可行票价# 不知道为啥多出两个标签,前两个标签不是, 所以去除前两个price_list = price_list[2:]print("------票价档次数量:%s------" % len(price_list))num = 0for i in self.price:# j = price_list[i - 1].get_attribute('class')print("------正在抢购第 %s 挡位票------" % i)try:span = price_list[i - 1].find_element_by_tag_name("span")print("------第 %s 档票已经售完------" % i)num +=1if num < len(self.price):continueexcept:price_list[i - 1].click()breakif num == len(self.price):print("------你想抢的票已售完------")raise Exception("你想抢的票已售完")except Exception as e:raise edef select_buy_name(self):try:# 先判断是否有选择购买人的标签buy_name_label = self.driver.find_elements_by_class_name("dm-ticket-buyer")if not buy_name_label:returnbuy_name_click = self.driver.find_element_by_xpath("//div[@class='next-row next-row-no-padding buyer-list']/div[%s]" % self.name_num)click_1 = Truewhile click_1:try:buy_name_click.click()click_1 = Falseexcept Exception as e:passexcept Exception as e:raise edef submit(self):try:submit_click = self.driver.find_element_by_xpath("//div[@class='submit-wrapper']/button")click_2 = Truewhile click_2:try:submit_click.click()click_2 = Falseexcept Exception as e:passexcept Exception as e:raise edef quit(self):while self.driver.title != "支付宝 - 网上支付 安全快速!":time.sleep(1)self.driver.quit()def rush_ticket(self):try:# 直接来到演唱会购票界面self.driver.get(self.book_url)# 选择票价self.select_price()# 点击立即预定click_book = self.driver.find_element_by_class_name("buybtn")click_book.click()# 选择购买人self.select_buy_name()# 其他默认# 点击提交订单self.submit()except Exception as e:raise edef run(self):try:# 登录self.login()# 判断抢票时间是否到达print("------等待抢票时间点到来,进行抢票------")while time.mktime(self.rush_time) - time.time() > 0.5:  # 提前0.2-0.5秒开始抢time.sleep(0.4)start_time = time.time()print("------开始抢票,时间点:%s------" % datetime.now())# 抢票loop = 1for i in range(self.num):try:print("------正在进行第 %s 轮抢票------" % (i + 1))self.rush_ticket()breakexcept Exception as e:if loop == self.num:raise eloop += 1pass# self.rush_ticket()end_time = time.time()print("抢票结束,时间点:%s" % datetime.now())print("抢票总时长:%s, 此时长不包括登录时间" % (end_time - start_time))print("抢票成功,抓紧去订单中付款!!")# 关闭浏览器self.quit()time.sleep(20)except Exception as e:self.driver.quit()print("******抢票失败,原因:%s******" % str(e))if __name__ == '__main__':book = Book_Ticket()book.run()

前提安装好python,selenium包,以及电脑安装了谷歌浏览器,下载了谷歌浏览器驱动
init中有些变量是从config.conf读取出来的,属于自定义抢票的配置

# 按标签文本内容查找标签
self.driver.find_element_by_xpath("//span[text()='RomDevTest ☆']")

python使用selenium大麦网抢票相关推荐

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

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

  2. 大麦网抢票JavaScript代码,快速锁定你想要的时间和价格

    大麦网抢票JavaScript代码,快速锁定你想要的时间和价格 ___如何指定的某个按钮发送click事件? $('#priceList > div > ul > li:nth-ch ...

  3. 最新大麦网抢票脚本-Python实战

    学习时候的一个小例子,python挺有趣的,希望技术可以更进步 我也不多说啥了直接上图 系统:win10 python 版本:3.8.10 需要安装的库:selenium 安装方法: pip inst ...

  4. 【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!1

    文章目录 前言 一.分析购票过程 二.Selenium 模拟浏览器操作 三.逆向工程:抢票接口 总结 前言 你是否错过了周杰伦的票,最近又没抢到五月天的票,不要太难过,今晚有张学友的票,后天还有张杰的 ...

  5. appium移动端python大麦网抢票

    import time from datetime import datetime, timedeltafrom appium import webdriver from selenium.webdr ...

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

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

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

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

  8. python+selenium实现12306抢票

    python+selenium实现12306抢票 一.准备工作 1.要先下载相关的包,selenium.interval.最好使用国内清华源 pip install (which package) - ...

  9. 趣玩Python——如何帮女朋友快速抢票

    又到了半年一度的考试季,对于那些翻山越岭外出求学的莘莘学子们,相比于各显神通的考试,更紧张的莫过于买一张回家的车票,相信很多群最近都被下面这样的图占领了. 如今,随着12306的抗压能力越来越强,各种 ...

  10. 五一出行一票难求,用Python实现12306火车票自动抢票,省心省力!

    最近在学Python,所以用Python写了这个12306抢票脚本,分享出来,与大家共同交流和学习,有不对的地方,请大家多多指正.话不多说,进入正题: 在进入正题之前,我想说明一下,由于12306官网 ...

最新文章

  1. 之全能忙内_临沧大名山茶:喝过诸多忙肺茶,但你不知道什么是“隔年香”
  2. reactjs大列表大表格渲染组件:react-virtualized
  3. spring(3)高级装配
  4. 交换机以太网端口三种链路类型
  5. 美国人用什么android手机,美国过半消费者使用智能手机 Android占48.5%
  6. 同样是OpenJDK8,有的平台需要libpng12,有的不需要
  7. 深入浅出通信原理 陈爱军——读书笔记1
  8. GPS模块运用: GPS轨迹记录
  9. 正交试验案例分析全步骤
  10. 图文并茂!60页PPT《快速入门python学习路线》学不会你找我
  11. 阿里巴巴内部面试资料
  12. 人们常说的扩充计算机内存,电脑加大内存条有什么好处
  13. ubuntu18.04通过deb文件安装软件
  14. C# 之 ZipOutPutStream 压缩文件
  15. 国内AR智能眼镜发展难点分析
  16. JavaScript进阶-高级特性及ES6
  17. 我的世界java百度什么电脑玩好_【我的世界】为了在龙芯电脑上玩Minecraft(我的世界)我做了什么_玩得好游戏攻略...
  18. 金羚纸业化工厂人员定位解决方案,苏州新导助力化工厂人员定位系统实施
  19. MYSQL数据库- 修改数据表名称、列名称
  20. java 判断是否为男女_java:生成中文姓名(区分男女)

热门文章

  1. FAT32/exFAT/NTFS,三种U盘格式的区别
  2. Date对象身上的绑定的属性与方法
  3. 经纬度5位数和6位数差多少_经度和纬度的最大长度是多少?
  4. 第八章-分析句子结构
  5. h5php大转盘抽奖,html5转盘抽奖 完整代码下载(网页版)
  6. 运用PS做图片快捷键
  7. word中图片为嵌入式格式时显示不全_word插入图片嵌入式 word图片显示不全
  8. 专访SOSO街景地图:寻找工具性产品突破的机遇
  9. 无人机基础知识:多旋翼无人机自动控制原理与算法
  10. gtx1060 能用catia软件吗_性能炸天!资深IT大叔详测Precision 7730工作站