想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本

本文介绍了如何使用Python的selenium库制作一个自动抢票脚本,通过面向对象编程、保存和读取Cookie实现免登陆,以及进行抢票和下单的操作。详细步骤包括登录设置、免登陆实现和抢票下单流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

嗨喽!大家好,这里是魔王!!

大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。

但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票

那么,今天带大家用Python来制作一个自动抢票的脚本小程序
请添加图片描述

此次知识点:

  • 面向对象编程
  • selenium 操作浏览器
  • pickle 保存和读取Cookie实现免登陆
  • time 做延时操作
  • os 创建文件,判断文件是否存在

开发环境:

  • 版 本:anaconda5.2.0(python3.6.5)
  • 编辑器:pycharm

python安装包 安装教程视频

pycharm 社区版 专业版 及 激活码

视频教程私我领取

第三方库:

  • selenium >>> pip install selenium==3.4.1

步骤

  1. 实现免登陆
    第一次登陆的时候 会帮助我记录我们的登陆信息
    set_cookie 登陆成功之后 cookie会发生变化
    后续抢票: 直接使用我们记录好的登陆信息
    get_cookie

  2. 抢票并且下单

请添加图片描述

首先导入本次所需的模块

from selenium import webdriver  # 操作谷歌浏览器 需要额外安装的 并且现在安装这个模块得指定版本 3.4
from time import sleep
import pickle  # 保存和读取cookie实现免登录的工具
import os   # 操作文件的模块

第一步,实现免登录

确定目标,设置全局变量

# 大麦网主页
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.search_category.0.0.77f24d15RWgT4o&id=654534889506&clicktitle=%E5%A4%A7%E4%BC%97%E7

初始化加载

class Concert:
    def __init__(self):
        self.status = 0         # 状态,表示如今进行到何种程度
        self.login_method = 1   # {0:模拟登录,1:Cookie登录}自行选择登录方式
        self.driver = webdriver.Chrome(executable_path='chromedriver.exe')        # 默认Chrome浏览器

登录调用设置cookie

def set_cookie(self):
    self.driver.get(damai_url)
    print("###请点击登录###")
    while self.driver.title.find('大麦网-全球演出赛事官方购票平台') != -1:
        sleep(1)
    print('###请扫码登录###')

    while self
### 移动端演唱脚本的实现方式 移动端演唱脚本通常基于自动化工具来模拟用户的操作行为,常见的工具有 Selenium 和 Appium。以下是关于如何在移动设备上实现脚本的具体说明: #### 工具选择 Appium 是一种流行的开源框架,专门用于测试和控制移动应用程序的行为[^2]。它可以与 Python 集成,支持 Android 和 iOS 平台上的应用自动化。 #### 脚本结构概述 1. **导入必要的库** ```python from appium 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 ``` 2. **配置 Appium 连接参数** 设置 Desired Capabilities 参数以连接到目标设备或模拟器。 ```python desired_caps = { 'platformName': 'Android', # 或 'iOS' 'deviceName': 'Your Device Name', 'appPackage': 'com.damai', # 大麦网的应用包名 'appActivity': '.MainActivity' # 应用启动 Activity 名称 } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) wait = WebDriverWait(driver, 10) ``` 3. **主要功能模块** - **登录**: 自动化输入用户名和密码,并触发登录按钮。 ```python def login(): username_field = wait.until(EC.presence_of_element_located((By.ID, 'username'))) password_field = wait.until(EC.presence_of_element_located((By.ID, 'password'))) login_button = wait.until(EC.element_to_be_clickable((By.ID, 'login'))) username_field.send_keys('your_username') password_field.send_keys('your_password') login_button.click() ``` - **选择价和数量**: 查找对应的价格选项并调整购买数量。 ```python def select_ticket_price_and_quantity(price_id, quantity): price_option = wait.until(EC.element_to_be_clickable((By.ID, price_id))) quantity_input = wait.until(EC.presence_of_element_located((By.ID, 'quantity'))) price_option.click() quantity_input.clear() quantity_input.send_keys(str(quantity)) ``` - **提交订单**: 点击确认支付按钮完成下单。 ```python def submit_order(order_button_id): order_button = wait.until(EC.element_to_be_clickable((By.ID, order_button_id))) order_button.click() ``` 4. **定时逻辑** 使用循环配合当前时间和设定的目标时间对比,在达到预定时刻时立即执行动作。 ```python while True: current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') if current_time >= target_time: buy_mobile() # 假设这是封装好的移动端函数 break ``` 5. **异常处理机制** 添加错误捕获部分防止程序因网络延迟或其他原因崩溃。 ```python try: login() select_ticket_price_and_quantity('price_888', 2) submit_order('submit_order_btn') except Exception as e: print(f"An error occurred during the process: {e}") finally: driver.quit() ``` #### 注意事项 - 用户名和密码应加密存储或者采用环境变量管理,避免敏感数据泄露。 - 不同平台(如大麦网、猫眼等)可能存在不同的页面布局和技术防护措施,需针对性适配。 - 法律风险提示:频繁调用接口可能导致账号封禁甚至触犯法律条款,请谨慎使用此类技术手段获取稀缺资源[^3]。 ---
评论 515
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值