演唱会门票抢不到?不要慌,教你用python实现自动化抢票

这篇具有很好参考价值的文章主要介绍了演唱会门票抢不到?不要慌,教你用python实现自动化抢票。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

之前一直在更新从零开始学python系列的系列文,最近有点忙停更了两天,今天来插一篇其他的文章。

之前有小伙伴留言说女朋友快生日了,喜欢某某某但是手动买票根本就是买不到,又不想当大冤种从黄牛手里加钱,于是乎在疯狂星期四的晚上遭到’‘贿赂’'的我连夜搞定了

一丶安装环境和配置文件

要用python实现,下载和安装python自然是不用说了,还有pycharm,不会下载安装python和pycharm的可以参考之前的文章或者视频(省去一万字)

selenium库的安装

python自动化的实现离不开selenium库,想要实现自动化抢票/抢茅台/九价资格等等都需要安装selenium,要使用Python和Selenium进行自动化购票,需要完成以下步骤:

1.安装Python和pip

首先,需要安装Python解释器和pip包管理器。你可以在Python的官方网站上下载并安装Python:https://www.python.org/downloads/。一般来说,Python3.x是最新的版本,推荐使用Python3。

2. 安装Selenium库

一旦你安装了Python和pip,你可以使用以下命令来安装Selenium库:

pie install selenium
3. 下载浏览器驱动

Selenium需要相关的浏览器驱动程序来与浏览器进行交互。你需要下载并安装适用于你所使用的浏览器和操作系统的驱动。下面是各个浏览器对应的驱动下载链接:

  • Chrome:http://chromedriver.chromium.org/downloads

下载后,将驱动程序解压并将可执行文件所在的路径添加到系统的环境变量中。因为我用的是谷歌的所以这么推荐。

4. 编写Python脚本:

使用Python的编辑器创建一个新的.py文件,并使用以下代码片段作为开始,以下是我本次抢票的源码,以大麦网参考。
python 抢票,python,selenium,python开发,python,自动化,开发语言,python开发,selenium,pycharm

二丶源码实现

python 抢票,python,selenium,python开发,python,自动化,开发语言,python开发,selenium,pycharm
如图所示。程序运行玩提示:抢票完成,但是目前只适用于网页版,所以部分得不行,适用APP版等我回头研究好了,在重新说明。还有一定要注意你的网速哦

源码如下:

import os  # 创建文件夹, 文件是否存在
import time  # time 计时
import pickle  # 保存和读取cookie实现免登陆的一个工具
from time import sleep
from selenium import webdriver  # 操作浏览器的工具
from selenium.webdriver.common.by import By

"""
一. 实现免登陆
二. 抢票并且下单
"""
# 大麦网主页
damai_url = 'https://www.damai.cn/'
# 登录
login_url = 'https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F'
# 抢票目标页
target_url = 'https://detail.damai.cn/item.htm?spm=a2oeg.home.card_0.ditem_2.591b23e1AyXdAl&id=729700971838'


# class Concert:
class Concert:
    # 初始化加载
    def __init__(self):
        self.status = 0  # 状态, 表示当前操作执行到了哪个步骤
        self.login_method = 1  # {0:模拟登录, 1:cookie登录}自行选择登录的方式
        self.driver = webdriver.Chrome(executable_path='chromedriver.exe')  # 当前浏览器驱动对象

    # cookies: 登录网站时出现的 记录用户信息用的
    def set_cookies(self):
        """cookies: 登录网站时出现的 记录用户信息用的"""
        self.driver.get(damai_url)
        print('###请点击登录###')
        # 我没有点击登录,就会一直延时在首页, 不会进行跳转
        while self.driver.title.find('大麦网-全球演出赛事官方购票平台') != -1:
            sleep(1)
        print('###请扫码登录###')
        # 没有登录成功
        while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':
            sleep(1)
        print('###扫码成功###')
        # get_cookies: driver里面的方法
        pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb'))
        print('###cookie保存成功###')
        self.driver.get(target_url)

    # 假如说我现在本地有 cookies.pkl 那么 直接获取
    def get_cookie(self):
        """假如说我现在本地有 cookies.pkl 那么 直接获取"""
        cookies = pickle.load(open('cookies.pkl', 'rb'))
        for cookie in cookies:
            cookie_dict = {
                'domain': '.damai.cn',  # 必须要有的, 否则就是假登录
                'name': cookie.get('name'),
                'value': cookie.get('value')
            }
            self.driver.add_cookie(cookie_dict)
        print('###载入cookie###')

    def login(self):
        """登录"""
        if self.login_method == 0:
            self.driver.get(login_url)
            print('###开始登录###')
        elif self.login_method == 1:
            # 创建文件夹, 文件是否存在
            if not os.path.exists('cookies.pkl'):
                self.set_cookies()  # 没有文件的情况下, 登录一下
            else:
                self.driver.get(target_url)  # 跳转到抢票页
                self.get_cookie()  # 并且登录

    def enter_concert(self):
        """打开浏览器"""
        print('###打开浏览器,进入大麦网###')
        # 调用登录
        self.login()  # 先登录再说
        self.driver.refresh()  # 刷新页面
        self.status = 2  # 登录成功标识
        print('###登录成功###')
        # 处理弹窗
        if self.isElementExist('/html/body/div[2]/div[2]/div/div/div[3]/div[2]'):
            self.driver.find_element(By.XPATH, '/html/body/div[2]/div[2]/div/div/div[3]/div[2]').click()

    # 二. 抢票并且下单
    def choose_ticket(self):
        """选票操作"""
        if self.status == 2:
            print('=' * 30)
            print('###开始进行日期及票价选择###')
            while self.driver.title.find("确认订单") == -1:
                try:
                    buybutton = self.driver.find_element(By.CLASS_NAME, 'buybtn').text
                    if buybutton == '提交缺货登记':
                        self.status = 2  # 没有进行更改操作
                        self.driver.get(target_url)  # 刷新页面 继续执行操作
                    elif buybutton == '立即预定':
                        # 点击立即预定
                        self.driver.find_element('buybtn').click()
                        self.status = 3
                    elif buybutton == '立即购买':
                        self.driver.find_element(By.CLASS_NAME, 'buybtn').click()
                        self.status = 4
                    elif buybutton == '选座购买':
                        self.driver.find_element(By.CLASS_NAME, 'buybtn').click()
                        self.status = 5
                except:
                    print('###没有跳转到订单结算界面###')
                title = self.driver.title
                if title == '选座购买':
                    # 选座购买的逻辑
                    self.choice_seats()
                elif title == '确认订单':
                    # 实现下单的逻辑
                    while True:
                        # 如果标题为确认订单
                        print('正在加载.......')
                        # 如果当前购票人信息存在 就点击
                        if self.isElementExist('//*[@id="container"]/div/div[9]/button'):
                            # 下单操作
                            self.check_order()
                            break

    def choice_seats(self):
        """选择座位"""
        while self.driver.title == '选座购买':
            while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[1]/div[2]/img'):
                print('请快速选择你想要的座位!!!')
            while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[2]/div'):
                self.driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/div[2]/div[2]/button').click()

    def check_order(self):
        """下单操作"""
        if self.status in [3, 4, 5]:
            print('###开始确认订单###')
            time.sleep(1)
            try:
                # 默认选第一个购票人信息
                self.driver.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.driver.find_element(By.XPATH, '//*[@id="container"]/div/div[9]/button').click()
            time.sleep(20)

    def isElementExist(self, element):
        """判断元素是否存在"""
        flag = True
        browser = self.driver
        try:
            browser.find_element(By.XPATH, element)
            return flag
        except:
            flag = False
            return flag

    def finish(self):
        """抢票完成, 退出"""
        self.driver.quit()


if __name__ == '__main__':
    con = Concert()
    try:
        con.enter_concert()  # 打开浏览器
        con.choose_ticket()  # 选择座位
    except Exception as e:
        print(e)
        con.finish()

需要注意的是,不同的购票网站可能会有不同的网页结构和交互方式。你可能需要使用Selenium提供的API来定位元素和模拟用户操作

此外,Selenium还支持Headless模式,可以在后台运行浏览器以节省资源和提高效率。可以通过设置浏览器选项来启用Headless模式。

如果你也想学这个技术,欢迎留言,完整视频教程和源码一起分享~~~
python 抢票,python,selenium,python开发,python,自动化,开发语言,python开发,selenium,pycharm文章来源地址https://www.toymoban.com/news/detail-619201.html

到了这里,关于演唱会门票抢不到?不要慌,教你用python实现自动化抢票的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用Python写一个抢演唱会门票的脚本

    这个代码示例定义了一个 grab_ticket 函数,模拟了抢票过程。每个线程都会调用这个函数来进行抢票行为。 在 grab_ticket 函数中,首先输出一条消息,表示正在尝试获取门票,并延迟2秒钟模拟网络请求时间。然后,随机决定是否成功获取门票。如果没有成功,则输出相应的消息

    2024年02月15日
    浏览(49)
  • 如何使用 Python Selenium 自动购买 Interpark 演唱会门票?

    Interpark是韩国的一家知名网上购物网站,成立于1996年。它是韩国最早开展网上零售业务的公司之一,提供各种产品,包括各种书籍、电子产品、珠宝、户外用品、食品和服装等等。Interpark还提供机票、旅游和酒店等服务。它已经成为韩国最大的综合型网上购物商城之一。 1

    2024年02月10日
    浏览(35)
  • 【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!

    为了帮助大家在激烈的抢票竞争中获得更大的成功机会,本文将介绍抢票软件的实现原理以及我所了解的一些抢票方式。 但是,请不要过度将希望寄托于抢票软件,它有时也不灵,经过我的验证,即使你用到了抢票软件,也不一定能抢到票。 票务平台会经常调整反爬策略打

    2024年02月07日
    浏览(46)
  • 【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!1

    你是否错过了周杰伦的票,最近又没抢到五月天的票,不要太难过,今晚有张学友的票,后天还有张杰的票,加油哦! Python配套案例源码、资料点击领取福利 为了帮助你在激烈的抢票竞争中获得更大的成功机会,本文将介绍抢票软件的实现原理以及我所了解的一些抢票方式

    2024年02月11日
    浏览(43)
  • 用Java写一个抢演唱会门票的脚本

    这个代码示例定义了一个 grabTicket 函数,模拟了抢票过程。每个线程都会调用这个函数来进行抢票行为。 在 grabTicket 函数中,首先输出一条消息,表示正在尝试获取门票,并延迟2秒钟模拟网络请求时间。然后,随机决定是否成功获取门票。如果没有成功,则输出相应的消息

    2024年02月12日
    浏览(34)
  • 用C++写一个抢演唱会门票的脚本

    这个代码示例首先定义了演唱会门票总数,并初始化剩余门票数量为总数。 然后,它使用一个for循环模拟了多个用户同时进行抢票行为的过程。每个用户都会尝试获取门票,通过随机决定是否成功来模拟网络请求的结果。 如果用户尝试获取门票失败,则将输出相应的消息;

    2024年02月16日
    浏览(73)
  • 程序员大战黄牛党,破解演唱会门票秒光之困

    反黄牛,为何是场持久战? 撰 文 | 林秋艺 编辑 | 龚   正 这个五月,似乎都被五月天霸屏了。从5月9日的30万张五月天演唱会门票被5秒扫光;到粉丝群起反抗,喊出“宁可鸟巢门口站,也不能让黄牛赚”,再到这几天“五月天演唱会黄牛票价格下跌近万元”冲上热搜榜……

    2024年02月06日
    浏览(41)
  • 【开题报告】基于SpringBoot的演唱会门票在线预定系统的设计与实现

    基于Spring Boot的演唱会门票在线预定系统的设计与实现旨在满足现代社会对于便捷、高效购票服务的需求。随着音乐行业的发展和演唱会市场的繁荣,越来越多的人愿意参加演唱会,享受音乐盛宴。然而,传统的线下购票方式存在排队等待和票源紧张等问题,无法满足人们日

    2024年02月08日
    浏览(51)
  • 自动化测试、爬虫、秒杀抢购、数据获取新方案,利用docker镜像运行安卓云手机,同时模拟运行多个手机进行数据抓取,可实现火车票、演唱会门票、茅台、直播、iPhone手机自动下单等各种多任务

    自动化测试、爬虫、秒杀抢购、数据获取新方案,利用docker镜像运行安卓云手机,同时模拟运行多个手机进行数据抓取,可实现火车票、演唱会门票、茅台、直播、iPhone手机自动下单等各种多任务。 这里选择的是Redroid,ReDroid(Re mote an Droid)是一个 GPU 加速的 AIC(Android In

    2024年02月03日
    浏览(65)
  • Python制作【大麦网】抢票程序,看演唱会再也不怕没票了

    大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。 但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票 那么,今天带大家用Python来制作一个自动抢票的脚本小程序 面向对象编程 selenium 操作浏览器

    2024年02月05日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包