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

下面是“Python selenium实现大麦网自动购票过程解析”的完整攻略。

1. 背景介绍

大麦网是一个音乐会、演唱会等票务信息平台,用户可以在该平台上购买各类演出门票。由于一些热门演出的门票常常在瞬间被抢购完毕,使用自动化工具进行抢票已经成为了很多人的选择。

本文介绍了如何使用 Selenium 及 Python 在大麦网进行自动购票的过程,方便大家在研究抢票过程中有所收获。

2. 简要介绍

本文的自动购票过程分为以下几步:

  1. 登录大麦网账号
  2. 进入指定演出页面
  3. 判断是否可以购票,如果可以则购买票
  4. 完成购票并查询订单信息

3. 具体步骤

3.1 登录大麦网账号

在使用 Selenium 进行自动化操作前,需要先载入浏览器驱动。这里以 Chrome 浏览器为例,假定已经安装好了 Chrome 浏览器并下载了对应的驱动。在 Python 中通过 webdriver 模块可以启动该驱动实现浏览器的控制。

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.damai.cn/')

使用上述代码打开 Chrome 浏览器并打开大麦网首页。

接下来需要实现自动登录功能。针对大麦网,可以通过以下方式实现登录功能。

login_btn = browser.find_element_by_link_text('登录')
login_btn.click()

phone = browser.find_element_by_name('phone')
password = browser.find_element_by_name('password')
phone.send_keys('xxx')  # 输入大麦网账号
password.send_keys('xxx')  # 输入大麦网密码

submit_btn = browser.find_element_by_css_selector('form .btn')
submit_btn.click()

以上代码实现了在大麦网首页点击登录按钮,然后输入指定的手机号和密码进行登录的过程。

3.2 进入指定演出页面

在进入指定演出页面前,需要先进行搜索操作。以“蔡徐坤”的演唱会为例,可以使用如下代码实现搜索操作。

from selenium.webdriver.common.keys import Keys

search_box = browser.find_element_by_css_selector('#sear')
search_box.send_keys('蔡徐坤')
search_box.send_keys(Keys.RETURN)

以上代码实现在大麦网首页搜索框输入“蔡徐坤”并提交搜索。

接下来需要进入指定演出页面,找到对应的演出并进入其购买页面。可以通过以下代码实现:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(browser, 10)

# 等待搜索结果出现,并点击搜索结果中第一个演出项
ul = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.cate_list ul')))
li = ul.find_element_by_css_selector('li[data-act-code="cpxq-click"]')
li.click()

# 等待演出页面弹窗出现,并关闭弹窗
iframe = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'iframe#Dialog_xxl')))
browser.switch_to.frame(iframe)  # 切换到弹窗iframe中
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#Dialog_xxl+div .close'))).click()
browser.switch_to.default_content()

# 等待演出页面信息出现,并点击购买按钮
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.buybtn')))
browser.find_element_by_css_selector('.buybtn').click()

以上代码实现了按照搜索结果进入演出信息页面,关闭弹窗并点击购买按钮。

3.3 购买票

在进入购票页面后,需要实现定位到票价区、选择票品、选择座位、提交订单等多个步骤。这里只展示如何选择票品并提交订单。

# 等待选择票品的弹窗出现
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.perform__order__select .modal-body')))
# 找到需要选择的票品,选择一个票品并点击“立即预订”
ticket = browser.find_element_by_id('perform__order__select__9_1081314101')
ticket.click()
wait.until(EC.presence_of_element_located((By.ID, 'btnBuyNow'))).click()

# 等待页面跳转,进入确认订单页面
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.submit-wrapper')))
# 勾选同意协议并提交订单
agree_checkbox = browser.find_element_by_id('order_agree')
agree_checkbox.click()
browser.find_element_by_id('overNextBtn').click()

以上代码实现了选择票品并按要求提交订单的过程。

3.4 查询订单信息

成功提交订单后,需要查询订单信息。这里将订单信息通过邮件的方式发给使用者。可以使用 smtplib 模块实现邮件发送功能。

import smtplib
from email.mime.text import MIMEText

def send_email(content):
    msg = MIMEText(content)
    msg['Subject'] = '订单信息'
    msg['From'] = 'xxx@xxx.com'  # 发送邮件的邮箱
    msg['To'] = 'xxx@xxx.com'  # 接收邮件的邮箱

    smtp = smtplib.SMTP_SSL('smtp.xxx.com', 465)
    smtp.login('xxx@xxx.com', 'xxx')  # 发送邮件的邮箱和授权码
    smtp.sendmail('xxx@xxx.com', msg['To'], msg.as_string())
    smtp.quit()

order_info = browser.find_element_by_css_selector('.order-info')
send_email(order_info.text)

以上代码实现了查询订单信息并通过邮箱的方式发送信息的过程。

4. 示例说明

4.1 自动登录代码示例

为了方便演示,这里将登录步骤分成两个函数:

def load_login_page():
    browser.get('https://www.damai.cn/')  # 打开大麦网首页
    wait.until(EC.presence_of_element_located((By.LINK_TEXT, '登录'))).click()  # 点击登录按钮

def login(username, password):
    phone = browser.find_element_by_name('phone')
    password_elem = browser.find_element_by_name('password')
    submit_btn = browser.find_element_by_css_selector('form .btn')

    phone.send_keys(username)  # 输入用户名
    password_elem.send_keys(password)  # 输入密码
    submit_btn.click()  # 点击登录按钮

在代码中先调用 load_login_page 函数打开大麦网首页并点击登录按钮,载入登录页面。接着调用 login 函数实现具体的登录操作。

load_login_page()
login('user789', 'psw123')

以上代码实现用自动化方式登录大麦网。

4.2 自动购票代码示例

为了方便演示,这里将购票操作分成两个函数。第一个函数用于处理登录过程和进入指定演出页面过程,第二个函数用于实现选择票品和提交订单的操作。

def go_to_concert(concert_name):
    # 打开大麦网首页,并进行搜索
    browser.get('https://www.damai.cn/')
    search_box = browser.find_element_by_css_selector('#sear')
    search_box.send_keys(concert_name)
    search_box.send_keys(Keys.RETURN)

    # 等待搜索结果出现,并点击搜索结果中第一个演出项
    ul = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.cate_list ul')))
    li = ul.find_element_by_css_selector('li[data-act-code="cpxq-click"]')
    li.click()

    # 等待演出页面弹窗出现,并关闭弹窗
    iframe = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'iframe#Dialog_xxl')))
    browser.switch_to.frame(iframe)  # 切换到弹窗iframe中
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#Dialog_xxl+div .close'))).click()
    browser.switch_to.default_content()

    # 等待演出页面信息出现,并点击购买按钮
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.buybtn')))
    browser.find_element_by_css_selector('.buybtn').click()

def choose_tickets():
    # 等待选择票品的弹窗出现
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.perform__order__select .modal-body')))
    # 找到需要选择的票品,选择一个票品并点击“立即预订”
    ticket = browser.find_element_by_id('perform__order__select__9_1081314101')
    ticket.click()
    wait.until(EC.presence_of_element_located((By.ID, 'btnBuyNow'))).click()

    # 等待页面跳转,进入确认订单页面
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.submit-wrapper')))
    # 勾选同意协议并提交订单
    agree_checkbox = browser.find_element_by_id('order_agree')
    agree_checkbox.click()
    browser.find_element_by_id('overNextBtn').click()

以上代码实现了进入指定演出页面、选择票品并提交订单的过程。

go_to_concert('蔡徐坤')
choose_tickets()

以上代码实现了自动购票过程,将自动选择票品并提交订单。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python selenium实现大麦网自动购票过程解析 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • 深入理解Python虚拟机中的Code obejct

    深入理解Python虚拟机中的Code object 1. Code object是什么? Code object是Python源代码在内存中的对象表示形式,是Python虚拟机从源代码中读取编译后的结果。在Python中,代码是一等对象,这意味着代码可以像任何其他对象一样被操作。 Code object主要由以下组成部分: bytecode:字节码序列,由…

    python 2023年6月7日
    00
  • python时间序列数据相减的实现

    下面是关于“Python时间序列数据相减的实现”的完整攻略,希望对你有帮助。 什么是时间序列数据 时间序列数据是一种按照时间顺序排列的数据,通常在金融、气象、交通等领域广泛应用。时间序列数据的特点是存在时间相关性,且数据点之间的时间间隔通常不是固定的。 如下是一组时间序列数据的示例: 2019-01-01 00:00:00,10.2 2019-01-01 0…

    python 2023年6月2日
    00
  • 学习python的几条建议分享

    下面是详细讲解“学习Python的几条建议分享”的攻略: 学习Python的几条建议分享 初学入门建议 选择合适的教材和学习路径:由于Python学习资料较多,建议选择一本经典入门教材(例如谢希仁的《Python 语言程序设计》),并按照系统化的章节顺序进行学习,练习每一章节的例子,保证理解后再进入下一章节。 注重实践:Python是一种实用性语言,学习要注…

    python 2023年5月18日
    00
  • 详解Python命令行解析工具Argparse

    当你编写一个Python脚本时,它通常需要一些参数来提供上下文信息。例如,你可能需要指定文件路径,设置日志级别或指定输出格式。命令行参数是一种流行的方式来提供这些信息,但如果手工分析参数,则可能会变得非常棘手。因此,Python提供了Argparse模块来帮助我们通过解析命令行参数更加容易地获得所需信息。 Argparse简介 Argparse模块是Pyth…

    python 2023年5月18日
    00
  • 详解Python lambda函数

    下面是Python lambda函数的完整攻略。 Python lambda函数 Python中的lambda函数是一种匿名函数,它通常用于简单的函数定义,可以用于需要函数对象的任何地方。lambda函数的主要特点是它是匿名的,即没有具体的名称。 基本语法 lambda函数的基本语法如下: lambda arguments: expression 其中,ar…

    python-answer 2023年3月25日
    00
  • Python开发的十个小贴士和技巧及长常犯错误

    Python开发的十个小贴士和技巧及常犯错误 Python是一种流行的编程语言,许多开发人员选择使用Python进行快速开发。在Python的发展历程中,有许多小贴士和技巧可以帮助我们更好地开发,同时也有一些常见的错误需要避免。以下是Python开发的十个小贴士和技巧及长常犯错误的完整攻略: 1. 遵循PEP 8规范 PEP 8是Python语言官方制定的编…

    python 2023年5月13日
    00
  • 浅谈Python中threading join和setDaemon用法及区别说明

    我将为你详细讲解“浅谈Python中threading join和setDaemon用法及区别说明”的完整攻略。 1. 简介 在Python中,使用threading模块可以创建并发的线程。在多线程编程中,有两种常用的线程常用方法,分别是join()和setDaemon()方法。 2. join方法 join()方法是Thread类提供的一个方法,用来阻塞主…

    python 2023年5月19日
    00
  • 七个非常实用的Python工具包总结

    七个非常实用的Python工具包总结 Python是现今最流行的编程语言之一,拥有众多的工具包和库,可以方便地开发应用程序、web应用和数据科学等领域的程序。本篇文章将着重介绍七个非常实用的Python工具包,总结它们的用途、功能和示例操作。 1. Requests Requests是一个Python库,为HTTP通信提供了人性化的接口。Requests已被…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部