某麦网自动刷新抢票脚本——手机端(高级版)

某麦网自动刷新抢票脚本——电脑端

小白操作-抵制黄牛–需要更好用更高级关注获取

如何用Python自动抢大麦网演出票?
在数字化时代,购票已经成为我们生活的一部分,无论是音乐会、话剧、体育赛事还是各种展览,抢票几乎成了一项“必备技能”。但面对热门事件的有限票源,如何在第一时间内抢到心仪的票呢?今天,我们将探索如何使用Python脚本和Selenium自动化工具来增加抢票的成功率。
在这里插入图片描述

Selenium简介

Selenium是一个用于Web应用程序测试的工具,但它同样可以用于自动化任何web浏览器操作。通过模拟真实用户的行为,Selenium可以登录网站、搜索信息、填写表单等。

抢票脚本的原理

本文的脚本主要通过Python的Selenium库来实现自动抢票。它首先登录大麦网,然后定时刷新目标演出的购票页面,一旦发现有票即尝试购买。

实现步骤

  1. 环境准备
    确保你的Python环境已经安装好,并且安装了Selenium库。此外,还需要下载对应的浏览器驱动(例如ChromeDriver),并确保其版本与你的浏览器版本相匹配。

  2. 配置文件准备
    创建一个config.json文件,包含所有必要的配置信息,例如演出的日期、场次、票价等级、实名信息、用户昵称、票数、大麦网官网地址、目标购票地址以及浏览器驱动路径。这些信息将被脚本读取和使用。

  3. 编写选择票务信息的逻辑
    在choose_ticket方法中,根据大麦网页面的实际结构来选择日期、场次和票价等信息。这可能涉及到对Selenium的find_element_by_*和find_elements_by_*方法的使用,以及对页面元素进行点击操作。需要注意的是,页面结构可能会随时间变化,因此选择元素时应尽可能使用稳定的属性(如ID、名称或特定的CSS类)。

  4. 实现订单提交逻辑
    在submit_order方法中,实现点击“立即购买”按钮并提交订单的逻辑。这可能需要处理额外的页面元素,例如选座信息或确认订单信息的弹窗。

  5. 执行脚本
    执行脚本前,请确保所有配置都是正确的,特别是config.json文件中的信息。

在终端或命令提示符下运行脚本。脚本会首先打开大麦网登录页面,此时你需要手动完成登录操作。

登录完成后,脚本会自动导航到目标演出的页面,并根据choose_ticket方法中的逻辑选择票务信息。

最后,submit_order方法将尝试提交订单。由于可能存在需要手动操作的步骤(如选座),请保持对脚本运行过程的监控。

代码分析

初始化和配置读取
__init__方法:这个构造函数负责读取配置文件,并初始化类的属性。这包括演出的日期、场次、票价等级、实名信息、用户昵称、票数、大麦网官网地址、目标购票地址以及浏览器驱动路径。

_init_driver方法:这个私有方法负责初始化Selenium的WebDriver,设置浏览器选项以提升加载速度(如禁用图片和CSS加载),并返回一个WebDriver实例供后续使用。

登录操作
login方法:该方法打开大麦网的登录页面,并等待用户手动完成登录操作。这里采取了手动登录的方式以避开自动化处理可能遇到的验证码等问题。

进入演出页面
enter_concert_page方法:登录成功后,这个方法将浏览器导向目标演出的页面,并等待页面加载完成。

选择票务信息
choose_ticket方法:这个方法是用来选择演出的具体日期、场次和票价等信息的地方。由于实际的页面结构可能复杂且经常变化,这里只提供了一个选择日期的示例代码。实际使用时,需要根据大麦网页面的具体结构进行适当修改。

提交订单
submit_order方法:一旦选好票务信息,这个方法用于点击“立即购买”或类似的按钮以提交订单。这个步骤可能会涉及更多的用户交互(如选座),因此在实际应用中可能需要手动操作。

主流程
主流程:在if name == ‘main’:部分,脚本实例化Concert类,按顺序调用了登录、进入演出页面、选择票务信息、提交订单的方法。这个流程简洁地展示了使用Selenium自动化抢票的基本步骤。

注意事项
该脚本依赖于大麦网页面元素的特定结构,如类名等。如果大麦网更新了页面结构,脚本可能需要相应的更新。

结语
通过Python和Selenium,我们可以相对简单地实现自动抢票功能,为抢购心仪票务增加一份力量。然而,技术的使用需要谨慎,合理利用自动化技术,在不违反平台规则的前提下提高生活效率。希望这篇文章能为你在数字生活中增添一份便利。
请记住,这篇介绍旨在技术分享,使用此类脚本时,请遵守相关平台的规定,理解其中的风险。

部分代码奉上
⬇️⬇️⬇️

# coding: utf-8
import json
from time import sleep, time
from pickle import dump, load
from os.path import exists
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
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
class Concert(object):
    def __init__(self, config_path='./config.json'):
        with open(config_path, 'r', encoding='utf-8') as f:
            config = json.load(f)
        self.date = config['date']
        self.session = config['sess']
        self.price = config['price']
        self.real_name = config['real_name']
        self.nick_name = config['nick_name']
        self.ticket_num = config['ticket_num']
        self.damai_url = config['damai_url']
        self.target_url = config['target_url']
        self.driver_path = config['driver_path']
        self.driver = None
        self.status = 0
        self.time_start = 0
        self.time_end = 0
        self.num = 0
        self.setup_driver()  # 初始化浏览器驱动
   def setup_driver(self):
        """设置WebDriver,并预加载cookies,如果存在的话。"""
        options = webdriver.ChromeOptions()
        prefs = {
            "profile.managed_default_content_settings.images": 2,
            "profile.managed_default_content_settings.javascript": 1,
            'permissions.default.stylesheet': 2
        }
        options.add_experimental_option("prefs", prefs)
        capa = DesiredCapabilities.CHROME
        capa["pageLoadStrategy"] = "none"
        self.driver = webdriver.Chrome(executable_path=self.driver_path, options=options, desired_capabilities=capa)
        
        if exists('cookies.pkl'):
            self.driver.get(self.damai_url)  # 需要先访问网站才能设置cookies
            cookies = load(open("cookies.pkl", "rb"))
            for cookie in cookies:
                if 'expiry' in cookie:
                    del cookie['expiry']
                self.driver.add_cookie(cookie)
            print(u'Cookie载入完成')
        else:
            print(u"Cookie未找到,请先运行get_cookie方法获取")

    def check_order(self):
        if self.status in [3, 4, 5]:
            if self.real_name is not None:
                print(u"###等待--确认订单--页面出现,可自行刷新,若长期不跳转可选择-- CRTL+C --重新抢票###")
                try:
                    tb = WebDriverWait(self.driver, 1, 0.1).until(EC.presence_of_element_located((By.XPATH, '/html/body/div[3]/div[2]/div')))
                except:
                    raise Exception(u"***Error:实名信息选择框没有显示***")

                print(u'###开始确认订单###')
                print(u'###选择购票人信息,可手动帮助点击###')
                init_sleeptime = 0.0
                Labels = tb.find_elements_by_tag_name('label')

                # 防止点击过快导致没有选择多个人
                while True:
                    init_sleeptime += 0.1
                    true_num = 0
                    for num_people in self.real_name:
                        tag_input = Labels[num_people-1].find_element_by_tag_name('input')
                        if tag_input.get_attribute('aria-checked') == 'false':
                            sleep(init_sleeptime)
                            tag_input.click()
                        else:
                            true_num += 1
                    if true_num == len(self.real_name):
                        break
                print("本次抢票时间:", time()-self.time_start)
                self.driver.find_element_by_xpath('/html/body/div[3]/div[2]/div/div[9]/button').click() # 同意以上协议并提交订单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/754020.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[每周一更]-(第103期):GIT初始化子模块

文章目录 初始化和更新所有子模块分步骤操作1. 克隆包含子模块的仓库2. 初始化子模块3. 更新子模块 查看子模块状态提交子模块的更改处理子模块路径错误的问题 该问题的缘由是因为:在写某些代码的时候,仓库中有些文件夹,只提交了文件夹名称到…

C# SocketUDP服务器,组播

SocketUDP 自己即是服务器又是客户端 ,在发消息只需要改成对方ip和端口号即可 前提对方必须开启服务器 socket.Bind(new IPEndPoint(IPAddress.Parse("192.168.107.72"), 8080)); 控件:Button,TextBox,RichTextBox 打开自己服务器 public…

六、资产安全—信息分级资产管理与隐私保护(CISSP)

目录 1.信息分级 2.信息分级方法 3.责任的层级 4.资产管理 5.隐私数据管理角色 6.数据安全控制 7.数据保护方案 8.使用安全基线 六、资产安全—数据管理(CISSP): 五、身份与访问管理—身份管理和访问控制管理(CISSP): 1.信息分级 信息分级举列: 2.信息分级方…

Halcon 文本文件操作,形态学

一文件的读写 *******************************************************向文本文件写入字符串内容*************************************************************read_image (Image, fabrik)threshold (Image, Region, 0, 120)area_center (Region, Area, Row, Column)open_…

记录一下MATLAB优化器出现的问题和解决

今天MATLAB优化器出了点问题。我想了想,决定解决一下,不然后面项目没有办法进行下去。 我忘了截图了。 具体来说,是出现了下面的问题。 Gurobi: Cplex: 在上次为了强化学习调整了Pytoch环境以后(不知道是不是这个原因&#…

Mac(M1芯片)安装多个jdk,Mac卸载jdk

1.jdk下载 oracle官方链接:oracle官方下载链接 2.安装 直接下一步,下一步就行 3.查看是否安装成功 出现下图内容表示安装成功。 4.配置环境变量 open -e .bash_profile 路径建议复制过去 #刷新环境变量 source ~/.bash_profile 5.切换方法 6.jdk…

页分裂和页合并——Java全栈知识(33)

上篇文章我们讲到了 MySQL 的数据页,我们说到了 InnoDB 的索引是以 B树的形式构建的,而且 B树的节点都是一个数据页。 但是 B树在使用过程中难免会有节点分裂和节点合并的过程。 因为我们是以数据页为基本单位构造的 B树,那么 B树的节点分裂和…

火锅食材配送小程序的作用有什么

火锅店、麻辣烫店、餐厅等对火锅丸子食材的需求量很高,还有普通消费者零售等,市场中或城市里总是有着较为知名的食材店或厂商,通过产品质量、口碑、宣传、老客复购等获得更多生意营收。 线下生意放缓,需要商家拓宽渠道。运用雨科…

7thonline第七在线受邀出席零售业卓越运营联盟(COER)2024

近期,一场汇集行业精英、探讨卓越运营的盛会——零售业卓越运营联盟(COER)2024论坛开幕。此次论坛吸引了全球众多零售业者的关注,7thonline第七在线创始人马克骏先生也应邀参与该论坛,共同探讨零售业的未来发展趋势。 …

【保姆级详细介绍JavaScript初识及基本语法】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

Java代码基础算法练习-判断学生成绩等级-2024.06.28

任务描述: 输入一个学生的成绩(成绩大于等于 0 并小于等于 100),根据成绩判断学生成绩的等级。 60 分以下不及格;60-70 分为及格;70-80 分为中等;80-90 分为良好;90 分以上为优秀。 …

如何从iPhone恢复错误删除的照片

嘿,iPhone 用户!作为一名苹果专业人士,我见过相当多的“哎呀,我删除了它!”的时刻。今天,我在这里指导您完成从iPhone中恢复那些珍贵的,错误删除的照片的迷宫。坐下来,拿起你的设备&…

琴童杂志琴童杂志社琴童编辑部2024年第2期目录

成长空间 和钢琴成为一辈子的好朋友 赵宣萱; 4-5 弦外之音 雅克伊贝尔《室内乐小协奏曲》的演奏技术难点解析 张家睿;王韵然; 6-8 歌剧《艺术家的生涯》中咏叹调《人们叫我咪咪》的艺术特征和演唱处理 孙淼; 9-11《琴童》投稿:cn7kantougao163.com …

Transformer 结构

目录 一、Transformer 的整体结构二、Input Encoding三、Transformer Block3.1 Encoder3.1.1 Attention3.1.2 Self-attention3.1.3 Multi-head Attention 3.2 Decoder3.2.1 Masked Multi-head Attention 四、Transformer 的优缺点 遇到看不明白的地方,欢迎在评论中留…

spring boot 3.0.1多模块项目使用nacos动态配置

根pom文件增加&#xff0c;spring-cloud-alibaba包管理&#xff0c;注意版本spring-boot 3.0.3&#xff0c;spring-cloud-alibaba 2022.0.0.0-RC1 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0…

Redis--18--Redis Desktop Manage下载与安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Redis Desktop Manage1.官网下载https://redis.io/insight/ 2.安装方法3.使用方法3.1.进入RedisDesktopManager的主界面3.2 新建连接3.3 支持操作 Redis Desktop Ma…

RocketMQ快速入门:linux安装rocketmq并配置开机自启(十一)

目录 0. 引言1. 下载安装包1.1 高版本直接下载安装包1.2 下载源码包进行编译 2. namesrv和broker安装2.1 安装2.2 放开服务器端口2.3 测试 3. 配置开机自启3.1 配置namesrv开机自启3.2 配置broker开机自启 0. 引言 之前我们针对本机电脑安装rocketmq进行了讲解&#xff0c;同时…

QT在visual studio环境打开控制台窗口

明确需求 在VS环境中开发QT应用&#xff0c;有时遇到BUG想看日志&#xff0c;但是默认VS环境没有显示控制台窗口可看日志。 解决方法 对工程名单击右键。 点击属性&#xff0c;在打开界面按照如下图操作。 设置完成后弹出的控制台窗口如下图。

五线谱与简谱有什么区别 五线谱简谱混排怎么打 吉他谱软件哪个好

五线谱与简谱作为音乐记谱领域的两大主流系统&#xff0c;各自承载着深厚的历史渊源与独特的表现力&#xff0c;并在全球范围内被不同程度地接受和应用。尽管两者都是为了记录音乐作品中的音高和节奏信息&#xff0c;但其内在机制、适用范围以及学习曲线存在显著差别。下面我们…

Qt | windows Qt6.5.3安卓环境搭建成功版(保姆级教程)

01、第一章 Qt6.5.3安装 资源 Qt 国内下载地址清华大学开源软件镜像站https://mirrors.tuna.tsinghua.edu.cn/qt/archive/online_installers/Qt 阿里云盘下载Qt 安卓开发https://www.alipan.com/s/kNaues6CHaG点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极…