脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python selenium实现大麦网自动购票过程解析

Python selenium实现大麦网自动购票过程解析

2022-12-25 14:53松鼠爱吃饼干 Python

大麦网是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域,今天我们要用代码来实现他的购票过程,感兴趣的朋友一起看看吧

先来看看完成后的效果是怎么样的

Python selenium实现大麦网自动购票过程解析

开发环境

  • 版 本:anaconda(python3.8.8)
  • 编辑器:pycharm

代码实现步骤

  • 实现免登陆
  • 选座并且下单

 

实现免登陆

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.6ee64d156yMCV9&id=672706937093&clicktitle=%E7%95%99%E5%A3%B0%E7%8E%A9%E5%85%B72022%E3%80%8C%E6%97%B6%E9%97%B4%E7%9A%84%E8%B7%A8%E5%BA%A6%E3%80%8D%E5%B7%A1%E6%BC%94Vol%C2%B71%20%E9%95%BF%E6%B2%99%E7%AB%99'

初始化加载

from selenium import webdriver  # 操作浏览器的工具
def __init__(self):
  self.status = 0   # 状态, 表示当前操作执行到了哪个步骤
  self.login_method = 1  # {0:模拟登录, 1:cookie登录}自行选择登录的方式
  self.driver = webdriver.Chrome(executable_path='chromedriver.exe')  # 当前浏览器驱动对象

登录

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()           # 并且登录

cookies: 登录网站时出现的

import time       

def set_cookies(self):
  self.driver.get(damai_url)
  print('###请点击登录###')
  # 我没有点击登录,就会一直延时在首页, 不会进行跳转
  while self.driver.title.find('大麦网-全球演出赛事官方购票平台') != -1:
      sleep(1)
  print('###请扫码登录###')
  # 没有登录成功
  while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':
      sleep(1)
  print('###扫码成功###')
  # get_cookies: driver里面的方法
  pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb'))
  print('###cookie保存成功###')
  self.driver.get(target_url)

假如说我现在本地有 cookies.pkl 那么 直接获取

def get_cookie(self):
  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###')

运行代码可以得到所需要的cookis,这样就可以实现免登录

Python selenium实现大麦网自动购票过程解析

打开浏览器

def enter_concert(self):
  print('###打开浏览器,进入大麦网###')
  # 调用登录
  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 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)  # 刷新页面 继续执行操作
              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('###没有跳转到订单结算界面###')
          if              # 选座购买的逻辑
              self.choice_seats()
          elif              # 实现下单的逻辑
              while True:
                  # 如果标题为确认订单
                  print('正在加载.......')
                  # 如果当前购票人信息存在 就点击
                  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'):
          print('请快速选择你想要的座位!!!')
      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):
  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('//*[@id="container"]/div/div[9]/button').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 finish(self):
  self.driver.quit()

到此这篇关于Python selenium 简单的实现大麦网自动购票过程的文章就介绍到这了,更多相关Python大麦网自动购票内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_48405781/article/details/124672784

延伸 · 阅读

精彩推荐
  • Python如何使用 Python 制作多渠道归因模型

    如何使用 Python 制作多渠道归因模型

    在这篇文章中,我向您展示了如何使用 Python 制作多渠道归因模型。如您所见,目前使用的电子商务归因模型有很多种,每种模型都有自己的特点。...

    Python大本营5252022-02-24
  • PythonPython语言检测模块langid和langdetect的使用实例

    Python语言检测模块langid和langdetect的使用实例

    今天小编就为大家分享一篇关于Python语言检测模块langid和langdetect的使用实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友...

    Together_CZ6542021-05-30
  • Python一篇文章带你搞定 Python 中 Shutil 模块

    一篇文章带你搞定 Python 中 Shutil 模块

    Shutil可以简单地理解为sh + util,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。...

    Go语言进阶学习10202021-11-10
  • Python使用python实现三维图可视化

    使用python实现三维图可视化

    这篇文章主要介绍了使用python实现三维图可视化,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    自然卷卷、9692021-10-11
  • PythonPython 图片文字识别的实现之PaddleOCR

    Python 图片文字识别的实现之PaddleOCR

    OCR方向的工程师,之前一定听说过PaddleOCR这个项目,其主要推荐的PP-OCR算法更是被国内外企业开发者广泛应用,短短半年时间,累计Star数量已超过15k,频频...

    剑客阿良_ALiang8172022-03-02
  • Python详解django三种文件下载方式

    详解django三种文件下载方式

    这篇文章主要介绍了详解django三种文件下载方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    W-D9092021-01-28
  • Pythonmatplotlib绘制雷达图的基本配置(万能模板案例)

    matplotlib绘制雷达图的基本配置(万能模板案例)

    本文主要介绍了matplotlib绘制雷达图的基本配置(万能模板案例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    王小王-12310982022-11-28
  • Pythonasyncio异步编程之Task对象详解

    asyncio异步编程之Task对象详解

    这篇文章主要为大家详细介绍了asyncio异步编程之Task对象,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能...

    一起学python吧5262022-11-01