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出现segfault错误解决方法

    Python出现segfault错误解决方法 在Python中,segfault错误通常是由于内存访问错误或其他底层问题导致的。当Python解释器遇到segfault错误时,程序将崩溃并退出。本文将介绍一些常见segfault错误及其解决方法。 解决方法1:更新Python版本 如果您的Python版本过旧,可能会导致segfault错误。解决是更新Pyt…

    python 2023年5月13日
    00
  • python 实现单一数字取对数与数列取对数

    下面就是关于Python实现单一数字取对数与数列取对数的完整攻略。 单一数字取对数 如果想要计算一个数字的对数,需要使用Python math模块中的log函数。具体的代码如下所示: import math num = 100 base = 10 result = math.log(num, base) print(result) num:表示数字的值,这里…

    python 2023年6月3日
    00
  • 基于Python记录一场2023的烟花

    下面是详细讲解基于Python记录一场2023的烟花的完整攻略。 1. 准备工作 在使用 Python 记录烟花的过程前,需要先准备好需要使用的第三方库,包括 numpy 和 matplotlib。你可以通过以下命令在命令行中安装它们: pip install numpy matplotlib 2. 记录烟花的过程 2.1. 生成起点和目标点 在记录烟花的过…

    python 2023年6月2日
    00
  • python线程池 ThreadPoolExecutor 的用法示例

    下面是关于 Python 的线程池 ThreadPoolExecutor 的用法示例攻略。 什么是 ThreadPoolExecutor ThreadPoolExecutor 是 Python 库里的一个线程池库,用于管理和调度线程。通过使用线程池,可以简化线程的创建、维护和销毁等操作,提高线程的利用率和效率。 ThreadPoolExecutor 的基础用…

    python 2023年5月19日
    00
  • python中的property及属性与特性之间的优先权

    Python中的property是一种特殊的装饰器,它可以将函数转换为属性,即方法调用像属性一样使用。在Python中,属性和特性是一对密切相关的概念,因为它们共同构成了一个类的接口。 一、property的使用 1.1 基本用法 假设现在有一个名为Person的类,有属性name和age,我们需要对属性进行一些限制。下面是使用property实现对属性访问…

    python 2023年5月14日
    00
  • python包相关知识点之包的导入、相对路径以及绝对路径

    我可以为你详细讲解Python包相关的知识点。 导入Python包 在Python中,我们使用import语句来导入模块和包。使用语法如下: import module1 # 导入一个模块 import package1 # 导入一个包 当我们导入一个包时,Python会自动查找并运行该包中名为__init__.py的模块文件。该文件用于初始化包的内容,例如…

    python 2023年6月3日
    00
  • Python Http请求json解析库用法解析

    Python Http请求json解析库用法解析 什么是Http请求json解析? 在进行Web开发的过程中,我们经常需要从服务器获取JSON格式的数据。对于获取到的JSON数据,我们需要对其进行解析。Python中常用的JSON解析库有很多,如json、simplejson、demjson等。本篇攻略主要介绍如何使用Python Requests和json…

    python 2023年6月3日
    00
  • Python异步爬取知乎热榜实例分享

    在本攻略中,我们将介绍如何使用Python异步爬取知乎热榜。我们将提供两个示例,演示如何使用asyncio库和aiohttp库、如何使用Scrapy框架异步爬取知乎热榜。 步骤1:分析目标网站 在开始之前,我们需要分析目标网站的结构和数据。我们可以使用浏览器的开发者工具来分析目标网站。在本攻略中,我们将使用https://www.zhihu.com/hot …

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