下面是“Python selenium实现大麦网自动购票过程解析”的完整攻略。
1. 背景介绍
大麦网是一个音乐会、演唱会等票务信息平台,用户可以在该平台上购买各类演出门票。由于一些热门演出的门票常常在瞬间被抢购完毕,使用自动化工具进行抢票已经成为了很多人的选择。
本文介绍了如何使用 Selenium 及 Python 在大麦网进行自动购票的过程,方便大家在研究抢票过程中有所收获。
2. 简要介绍
本文的自动购票过程分为以下几步:
- 登录大麦网账号
- 进入指定演出页面
- 判断是否可以购票,如果可以则购买票
- 完成购票并查询订单信息
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技术站