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

news2024/10/7 4:24:04

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

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

如何用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() # 同意以上协议并提交订单

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【隐私计算】对SIMD编码的粗浅理解

首先需要知道,同态加密是在多项式上进行的,基于RLEW的整体流程如下: 将单个数编码到一个N阶(N项)多项式中,多项式系数的利用率极低。而在神经网络中,我们需要计算的东西往往是一个很大的矩阵/te…

使用 nvm 管理 Node 版本及 pnpm 安装

文章目录 GithubWindows 环境Mac/Linux 使用脚本进行安装或更新Mac/Linux 环境变量nvm 常用命令npm 常用命令npm 安装 pnpmNode 历史版本 Github https://github.com/nvm-sh/nvm Windows 环境 https://nvm.uihtm.com/nvm.html Mac/Linux 使用脚本进行安装或更新 curl -o- …

可用的微信小程序抓包方式(Charles + bp)

扫码领资料 获网安教程 前言 接到对公司小程序进行渗透的任务,尝试了网上几种对小程序抓包的方式(BurpProxifier、Burp安卓模拟器等)都无法完成抓包,可能已经失效,结合不同的文章尝试了bpCharles,成功抓包…

支持内嵌H5页面,谈谈微信小程序的应用场景

目录 一、微信小程序介绍二、什么是内嵌H5页面三、小程序内嵌H5页面的如何交互四、微信小程序的应用场景 一、微信小程序介绍 微信小程序是一种基于微信平台的轻量级应用,它无需下载安装,用户只需通过微信扫一扫或搜索即可快速打开使用。与传统的APP相比…

新火种AI|苹果要将苹果智能做成AI时代的APP Store?

作者:一号 编辑:美美 苹果还是想要自己做AI时代的“APP Store”。 自从去年开始落了队,苹果现在AI上开始高歌猛进。今年WWDC上展示的AI产品和与OpenAI的合作只是开始。有消息称,苹果正与Meta等AI巨头展开深入合作,这…

二、安装虚拟机

本篇来源:山海同行 本篇地址:https://shanhaigo.cn/courseDetail/1805875642621952000 本篇资源:以整理到-山海同行 一、官网下载centos7 1. 进入CentOS 官方网站 官方网站:https://www.centos.org/download/ 2. 选择iso 点击下…

数据库自动备份到gitee上,实现数据自动化备份

本人有个不太好的习惯,每次项目的数据库都是在线上创建,Navicat 连接线上数据库进行处理,最近有一个项目需要二次升级,发现老项目部署的服务器到期了,完蛋,数据库咩了!!!…

IP地址查询和代理服务器:双重保护隐私

随着网络应用的日益普及,我们的个人信息和数据安全面临前所未有的挑战。在此背景下,IP地址查询和代理服务器成为保护个人隐私和网络安全的两大关键工具。本文将从IP地址查询的原理和应用出发,深入剖析代理服务器在网络隐私保护中的作用&#…

一个分析电路图的好助手

GPT。 最进分析电路图的时候发现GPT支持读取图片功能: 还别说,分析的很有道理。 此外,它还可以分析芯片的引脚功能,辅助电路分析: AB胶:粘的非常牢固,需要A和B两种胶混合使用。

vue+go实现web端连接Linux终端

vuego实现web端连接Linux终端 实现效果 实现逻辑1——vue 依赖包 "xterm": "^5.3.0","xterm-addon-attach": "^0.9.0","xterm-addon-fit": "^0.8.0"样式和代码逻辑 <template><a-modalv-model:visib…

《分析模式》漫谈08-单继承不是“唯一继承”

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》第2章这一段&#xff1a; 划线处的single inheritance&#xff0c;2004中译本的翻译&#xff1a; 翻译为“单继承”&#xff0c;是正确的。 2020中译本的翻译&#xff1a…

【人工智能】—XGBoost、CatBoost、LightGBM算法构建信用卡欺骗识别模型

引言 在金融领域&#xff0c;信用卡欺诈行为一直是银行和金融机构面临的一大挑战。随着电子商务的快速发展&#xff0c;信用卡欺诈事件的数量和复杂性都在不断增加。据统计&#xff0c;全球每年因信用卡欺诈造成的损失高达数十亿美元。因此&#xff0c;开发有效的欺诈检测系统…

i-Health

技术栈&#xff1a;HTMLCSSJavascriptPHP

同步模式之保护性暂停模式

1. Guarded Suspension&#xff1a;一个线程需要等待另一个线程的执行结果 2. 理解 一个线程需要将结果传递给另一个线程&#xff0c;将这两个线程关联到到同一个 GuardedObject 如果需要源源不断地传递结果&#xff0c;需要使用消息队列&#xff08;生产者-消费者模型&…

SpringBoot(二)SpringBoot多环境配置

Spring框架常用注解简单介绍 SpringMVC常用注解简单介绍 SpringBoot&#xff08;一&#xff09;创建一个简单的SpringBoot工程 SpringBoot&#xff08;二&#xff09;SpringBoot多环境配置 SpringBoot&#xff08;三&#xff09;SpringBoot整合MyBatis SpringBoot&#xff08;四…

met和set的特性及区别

1、关联式容器 在c初阶阶段&#xff0c;我们已经接触了STL的部分容器&#xff0c;比如&#xff1a;vector,list,deque&#xff0c;forward_list等。 这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的就是数据本身。 而关联式容器…

[论文阅读笔记32] Object-Centric Multiple Object Tracking (ICCV2023)

最近Object centric learning比较火, 其借助了心理学的概念, 旨在将注意力集中在图像或视频中的独立对象&#xff08;objects&#xff09;上&#xff0c;而不是整个图像。这个方法与传统的基于像素或区域的方法有所不同&#xff0c;它试图通过识别和分离图像中的各个对象来进行…

详细的介绍匀加速运动的物理方程是如何转化为卡尔曼滤波的状态空间模型的

详细的介绍匀加速运动的物理方程是如何转化为卡尔曼滤波的状态空间模型的 flyfish 加速度是描述物体速度变化快慢的物理量&#xff0c;定义为速度对时间的变化率。数学上&#xff0c;它表示为&#xff1a; a Δ v Δ t a \frac{\Delta v}{\Delta t} aΔtΔv​ 其中&#xf…

[图解]SysML和EA建模住宅安全系统-02-现有运营领域-块定义图

1 00:00:00,840 --> 00:00:02,440 首先我们来看画在哪里 2 00:00:02,570 --> 00:00:08,310 你看&#xff0c;这是图的类型&#xff0c;图里面内容 3 00:00:08,320 --> 00:00:10,780 这是元素类型 4 00:00:10,790 --> 00:00:14,900 这是位置&#xff0c;哪个包 …

中国计量大学2024年成人高等继续教育招生简章

中国计量大学&#xff0c;作为一所享有盛誉的高等学府&#xff0c;始终秉持着“精益求精&#xff0c;追求卓越”的办学理念&#xff0c;致力于为社会培养各类优秀人才。在2024年&#xff0c;我校继续秉承这一传统&#xff0c;全面启动成人高等继续教育招生工作&#xff0c;为广…