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

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

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

准备工作

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

  1. 安装Selenium库:在命令行中运行 pip install selenium
  2. 下载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()

运行结果

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

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
购买大麦演唱会门票需要模拟浏览器的行为,可以使用Selenium库来实现。下面是一个简单的示例代码来演示如何使用Selenium来购买大麦演唱会门票: 首先,你需要安装Selenium库,可以使用以下命令在命令行中进行安装: ``` pip install selenium ``` 接下来,你需要下载对应的浏览器驱动程序,这里以Chrome浏览器为例。你可以在这里下载对应的Chrome浏览器驱动程序:http://chromedriver.chromium.org/downloads 下载完成后,将驱动程序放置在合适的目录下,并在代码中指定驱动程序的路径。 然后,你需要编写Python代码来模拟浏览器的行为。以下是一个示例代码: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 设置Chrome浏览器驱动程序的路径 driver_path = "/path/to/chromedriver" # 创建Chrome浏览器对象 driver = webdriver.Chrome(executable_path=driver_path) # 打开大麦演唱会门票页面 driver.get("https://www.damai.cn/") # 等待页面加载完成 wait = WebDriverWait(driver, 10) element = wait.until(EC.presence_of_element_located((By.ID, "search_txt"))) # 搜索演唱会门票 search_box = driver.find_element_by_id("search_txt") search_box.send_keys("演唱会门票") search_box.submit() # 等待搜索结果页面加载完成 wait.until(EC.presence_of_element_located((By.CLASS_NAME, "search__not_found"))) # 点击第一个搜索结果 search_result = driver.find_element_by_class_name("search__result__item") search_result.click() # 等待演唱会门票页面加载完成 wait.until(EC.presence_of_element_located((By.CLASS_NAME, "buybtn"))) # 点击购买按钮 buy_button = driver.find_element_by_class_name("buybtn") buy_button.click() # 等待购买页面加载完成 wait.until(EC.presence_of_element_located((By.ID, "confirm-order"))) # 填写购买信息 name_input = driver.find_element_by_id("buyerName") name_input.send_keys("张三") phone_input = driver.find_element_by_id("buyerTel") phone_input.send_keys("13812345678") # 点击确认购买按钮 confirm_button = driver.find_element_by_id("confirm-order") confirm_button.click() ``` 这个代码模拟了打开大麦演唱会门票页面,搜索演唱会门票,点击第一个搜索结果,点击购买按钮,填写购买信息,最后点击确认购买按钮的整个过程。你可以根据实际情况修改代码中的各种元素的ID或者类名来适应不同的页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0zxm

祝大家天天开心

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值