selenium使用Python自动抢购大麦网演唱会门票 您所在的位置:网站首页 演唱会购票页面图片 selenium使用Python自动抢购大麦网演唱会门票

selenium使用Python自动抢购大麦网演唱会门票

2024-06-05 17:45| 来源: 网络整理| 查看: 265

使用Python自动抢购大麦网演唱会门票

在这篇博客中,我将分享如何使用Python编写一个自动抢购大麦网演唱会门票的脚本。我们将使用Selenium库来实现自动化操作,以便在演唱会门票开售时快速抢购到心仪的票。

准备工作

在开始之前,我们需要安装Selenium库,并且确保已经安装了Microsoft Edge浏览器以及其驱动程序。如果你还没有安装,可以按照以下步骤进行:

安装Selenium库:在命令行中运行 pip install selenium。下载Microsoft Edge浏览器驱动程序:根据你的操作系统和浏览器版本,下载对应的驱动程序,并将其添加到系统路径中。 代码实现 每一部分代码讲解

首先,我们需要导入所需的库。在这个例子中,我们使用了selenium库来实现自动化浏览器操作,time库来实现等待和延时功能,pickle库用于读取和保存cookie信息,os库用于文件操作,以及By类来定位元素。

from selenium import webdriver import time import pickle import os from selenium.webdriver.common.by import By

接下来,我们创建了一个名为Concert的类,用于实现自动抢票的功能。

class Concert: def __init__(self): self.state = 0 # 状态,表示当前操作执行到了哪个步骤 self.log_method = 1 # 0{模拟登录,需要手动登录} 1 {cookie} # 创建浏览器操作对象 self.browser = webdriver.Edge()

在Concert类的初始化方法中,我们定义了一些初始变量,包括state用于表示当前操作执行到了哪个步骤,log_method用于选择登录方式,以及browser用于创建浏览器操作对象。

接下来,我们定义了一个名为set_cookies的方法,用于手动登录并保存cookie信息。

def set_cookies(self): self.browser.get(login_url) print("### 请扫码登陆 ###") time.sleep(25) print('登陆成功') # cookie.pkl pickle.dump(self.browser.get_cookies(), open('cookie.pkl', 'wb')) print('cookie保存成功') # 抢票 self.browser.get(ticket_url)

在这个方法中,我们首先打开登录页面,然后等待用户扫码登录,登录成功后将cookie信息保存到cookie.pkl文件中,最后跳转到抢票页面。

然后,我们定义了一个名为get_cookie的方法,用于加载已保存的cookie信息。

def get_cookie(self): cookies = pickle.load(open('cookie.pkl', 'rb')) for cookie in cookies: cookie_dict = {'domain': '.damai.cn', 'name': cookie.get('name'), 'value': cookie.get('value')} self.browser.add_cookie(cookie_dict) print('载入cookie成功')

在这个方法中,我们从cookie.pkl文件中加载cookie信息,并将其添加到浏览器中,以实现自动登录。

接下来,我们定义了一个名为log_in的方法,用于实现登录功能。

# TODO:登录 def log_in(self): if self.log_method == 0: self.browser.get(login_url) elif self.log_method == 1: # 如果当前目录下没有cookie.pkl文件,要登陆 if not os.path.exists('cookie.pkl'): # 登录一下 并且记录cookie self.set_cookies() else: self.browser.get(ticket_url) # 登录一下 通过selenium传入一些用户信息 self.get_cookie()

在这个方法中,我们根据log_method的值选择不同的登录方式,如果是0,则打开登录页面,如果是1,则检查是否有保存的cookie信息,如果没有则调用set_cookies方法手动登录,如果有则调用get_cookie方法加载cookie信息。

接下来,我们定义了一个名为enter_contert的方法,用于进入演唱会门票购买页面。

"""打开浏览器""" def enter_contert(self): print("进入大麦网") # 调用登录 self.log_in() self.browser.refresh() self.state = 2 print('登陆成功')

在这个方法中,我们调用了log_in方法进行登录,并刷新页面,最后将状态设置为2,表示登录成功。

接下来,我们定义了一个名为choose_ticket的方法,用于选择票务和下单的操作。

# TODO:选票和下单 def choose_ticket(self): if self.state == 2: print('=' * 30) print() while self.browser.title.find('确认订单') == -1: # 获取到下单按钮 buybutton = self.browser.find_element(By.CLASS_NAME, 'buybtn').text if buybutton == '提交缺货登记': self.browser.refresh() elif buybutton == '立即购买': self.browser.find_element(By.CLASS_NAME, 'buybtn').click() elif buybutton == '选座购买': self.browser.find_element(By.CLASS_NAME, 'buybtn').click() self.state = 4 else: self.state = 100 title = self.browser.title if title == '选座购买': # 执行选作操作 pass elif title == '确认购买': # 实现下单的操作 while True: print("正在加载") self.check_order() break

在这个方法中,我们首先检查状态是否为2,然后根据页面标题和按钮状态执行不同的操作,包括刷新页面、点击购买按钮、执行选座操作以及确认购买操作。

最后,我们定义了一个名为check_order的方法,用于确认订单。

def check_order(self): print('开始确认订单') try: self.browser.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.browser.find_element_by_xpath('//*[@id="container"]/div/div[9]/button').click()

在这个方法中,我们首先输出提示信息,然后尝试选择购票人信息并点击确认按钮。

最后,在main函数中,我们创建了一个Concert对象,并调用了相应的方法。

if __name__ == '__main__': con = Concert() con.log_in() con.enter_contert() con.check_order() 全部代码如下 import os import pickle # 记录和读取cookie import time from selenium import webdriver from selenium.webdriver.common.by import By damai_url = 'https://www.damai.cn/' ticket_url = 'https://detail.damai.cn/item.htm?spm=a2oeg.home.card_0.ditem_5.591b23e1bR0C5i&id=760029024857' login_url = 'https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F' class Concert: # 初始化加载 def __init__(self): self.state = 0 # 状态,表示当前操作执行到了哪个步骤 self.log_method = 1 # 0{模拟登录,需要手动登录} 1 {cookie} # 创建浏览器操作对象 self.browser = webdriver.Edge() def set_cookies(self): self.browser.get(login_url) print("### 请扫码登陆 ###") time.sleep(25) print('登陆成功') # cookie.pkl pickle.dump(self.browser.get_cookies(), open('cookie.pkl', 'wb')) print('cookie保存成功') # 抢票 self.browser.get(ticket_url) """假设已经有了cookie.pkl""" def get_cookie(self): cookies = pickle.load(open('cookie.pkl', 'rb')) for cookie in cookies: cookie_dict = {'domain': '.damai.cn', 'name': cookie.get('name'), 'value': cookie.get('value')} self.browser.add_cookie(cookie_dict) print('载入cookie成功') # TODO:登录 def log_in(self): if self.log_method == 0: self.browser.get(login_url) elif self.log_method == 1: # 如果当前目录下没有cookie.pkl文件,要登陆 if not os.path.exists('cookie.pkl'): # 登录一下 并且记录cookie self.set_cookies() else: self.browser.get(ticket_url) # 登录一下 通过selenium传入一些用户信息 self.get_cookie() """打开浏览器""" def enter_contert(self): print("进入大麦网") # 调用登录 self.log_in() self.browser.refresh() self.state = 2 print('登陆成功') # TODO:选票和下单 def choose_ticket(self): if self.state == 2: print('=' * 30) print() while self.browser.title.find('确认订单') == -1: # 获取到下单按钮 buybutton = self.browser.find_element(By.CLASS_NAME, 'buybtn').text if buybutton == '提交缺货登记': self.browser.refresh() elif buybutton == '立即购买': self.browser.find_element(By.CLASS_NAME, 'buybtn').click() elif buybutton == '选座购买': self.browser.find_element(By.CLASS_NAME, 'buybtn').click() self.state = 4 else: self.state = 100 title = self.browser.title if title == '选座购买': # 执行选作操作 pass elif title == '确认购买': # 实现下单的操作 while True: print("正在加载") self.check_order() break def check_order(self): print('开始确认订单') try: self.browser.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.browser.find_element_by_xpath('//*[@id="container"]/div/div[9]/button').click() if __name__ == '__main__': con = Concert() con.log_in() con.enter_contert() con.check_order() 运行结果

通过运行上述代码,我们就可以实现自动登录大麦网,进入演唱会门票购买页面,并尝试自动选择票务和下单的操作。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有