周杰伦演唱会总是抢不到票?教你用Python做一个自动抢票脚本

2023-10-26

相信想去周董演唱会的大家都用过大麦网抢票吧?

可是

抢不到啊

该说不说 我抢到了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

那么,今天带大家用Python来制作一个自动抢票的脚本小程序!

知识点:

  • 面向对象编程

  • selenium 操作浏览器

  • pickle 保存和读取Cookie实现免登陆

  • time 做延时操作

  • os 创建文件,判断文件是否存在

开发环境:

  • 版 本:anaconda5.2.0(python3.6.5)

  • 编辑器:pycharm

先导入本次所需的模块

import os  
import time  
import pickle  
from time import sleep  
from selenium import webdriver  

第一步,实现免登录

确定目标,设置全局变量

damai_url = "就是那个网站"  
login_url = "就是那个登陆地址"  
target_url = '就是那个目标网站  
#这里不是我不放,是平台不给放  
#要全部的就来  

初始化加载

class Concert:  
    def __init__(self):  
        self.status = 0           
        self.login_method = 1     
        self.driver = webdriver.Chrome(executable_path='chromedriver.exe')        

登录调用设置cookie

def set_cookie(self):  
    self.driver.get(damai_url)  
    print("###请点击登录###")  
    while self.driver.title.find('dm-全球演出赛事官方购票平台') != -1:  
        sleep(1)  
    print('###请扫码登录###')  
  
    while self.driver.title != 'dm-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':  
       sleep(1)  
    print("###扫码成功###")  
    pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))  
    print("###Cookie保存成功###")  
    self.driver.get(target_url  

获取cookie

def get_cookie(self):  
    try:  
        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###')  
    except Exception as e:  
        print(e)  

登录

    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_cookie()  
            else:  
                self.driver.get(target_url)  
                self.get_cookie()

打开浏览器

def enter_concert(self):  
    """打开浏览器"""  
    print('###打开浏览器,进入dm网###')  
    
    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 isElementExist(self, element):  
    flag = True  
    browser = self.driver  
    try:  
        browser.find_element_by_xpath(element)  
        return flag  
  
    except:  
        flag = False  
        return flag  

选票操作

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)  
                    print('###抢票未开始,刷新等待开始###')  
                    continue  
                elif buybutton == "立即预定":  
                    self.driver.find_element_by_class_name('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('waiting ......')  
                    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('###开始确认订单###')  
        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('//div[@class = "w1200"]//div[2]//div//div[9]//button[1]').click()  

抢票完成,退出

def finish(self):  
    self.driver.quit()  

测试代码是否成功

if __name__ == '__main__':  
    try:  
        con = Concert()               
        con.enter_concert()         
        con.choose_ticket()          
  
    except Exception as e:  
        print(e)  
        con.finish()  

最后看下效果如何

这里是演示嗷,我买到票的时候忘记录了哈哈哈哈哈

在这里插入图片描述

最后

我真的庆幸还好我学了python ,该说不说,有点用的

从现在开始就准备去看演唱会噜~

完整Python大麦抢票源码,我已打包好了,朋友们如果需要可以扫描下方CSDN官方认证二维码免费领取!

读者福利:如果你也喜欢编程,想通过学习Python转行获取更高薪资,那这套Python学习资料一定对你有用!

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的
一方面是学习时间相对较短,学习内容更全面更集中
二方面是可以找到适合自己的学习方案

包括:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等教程。带你从零基础系统性的学好Python!

读者福利:2023年零基础学Python必备资料(视频+源码+工具+软件) 安全链接免费领取

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

在这里插入图片描述

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

五、100道Python练习题

检查学习结果。

在这里插入图片描述

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


​​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

周杰伦演唱会总是抢不到票?教你用Python做一个自动抢票脚本 的相关文章

  • 如何在 PyCharm 中设置运行配置的默认工作目录

    当我想运行众多 python 脚本之一时 我点击运行 这会创建一个新的运行配置 该配置的工作目录是 python 脚本文件所在的文件夹 相反 它应该从项目范围的固定文件夹运行 我想以某种方式进行设置 但我真的不明白为什么 这有点奇怪 因为我
  • 使用 NaN 计算 numpy 数组中的移动平均值

    我正在尝试计算包含 NaN 的大型 numpy 数组中的移动平均值 目前我正在使用 import numpy as np def moving average a n 5 ret np cumsum a dtype float ret n
  • uwsgi + Django REST框架:空闲时间后很少有缓慢的请求

    我正在运行 Django REST 框架 白天每分钟的请求率相当低 我注意到一个我无法解释或重现的问题 每天 在夜间或清晨 当我的 RPM 接近于零时 我会收到 1 10 个超慢的请求 我的平均响应时间100 到 200 毫秒之间 但是这个
  • 在 Chaquopy 中转换数组和张量

    我该怎么做呢 我看到你的帖子说你可以将 java 对象传递给 Python 方法 但这不适用于 numpy 数组和 TensorFlow 张量 以下以及其各种变体是我尝试过的 但没有成功 double anchors new double
  • CodingBat sum67:为什么这个解决方案是错误的?

    我正在解决以下codingbat问题 返回数组中数字的总和 但忽略以 6 开头并延伸到下一个 7 的数字部分 每个 6 后面至少有一个 7 如果没有数字则返回 0 sum67 1 2 2 5 sum67 1 2 2 6 99 99 7 5
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • 在 Django 中上传文件

    我在 Django 1 6 版本 中上传文件时遇到问题 当我尝试做的时候new file data save 在我的views py 中我收到此错误 quiz patent 22 medical record 2 exams 处的属性错误
  • Python ttk.combobox 强制发布/打开

    我正在尝试扩展 ttk 组合框类以允许自动建议 我到目前为止的代码运行良好 但我想让它在输入一些文本后显示下拉列表 而不从小部件的输入部分移除焦点 我正在努力解决的部分是找到一种强制下拉的方法 在 python 文档中我找不到任何提及这一点
  • set() 可以在 Python 进程之间共享吗?

    我正在 Python 2 7 中使用多重处理来处理非常大的数据集 当每个进程运行时 它会将整数添加到共享的 mp Manager Queue 中 但前提是其他进程尚未添加相同的整数 由于您无法对队列进行 in 式成员资格测试 因此我这样做的
  • 散景服务器获取鼠标位置

    我正在开发一个带有散景 0 12 2 的交互式应用程序 它根据特定的交互更新绘图 现在 我使用滑块来更改图中字形的位置 但实际上我想访问鼠标在特定图中的位置 数据集是一个多维矩阵 张量 密集数据 每个图在特定位置显示一个维度 如果我更改一个
  • Seaborn 条形图条之间没有空格

    我使用下面的代码创建了一个 Seaborn 条形图 它来自https www machinelearningplus com plots top 50 matplotlib visualizations the master plots p
  • Django:通过外键将两个表连接到第三个表?

    我有三个型号 class A Model class B Model id IntegerField a ForeignKey A class C Model id IntegerField a ForeignKey A 我想要得到 B i
  • 如何检查两个数据集的匹配列之间的相关性?

    如果我们有数据集 import pandas as pd a pd DataFrame A 34 12 78 84 26 B 54 87 35 25 82 C 56 78 0 14 13 D 0 23 72 56 14 E 78 12 31
  • 无法运行bjam编译boost python教程

    我正在尝试跟随本教程 http www boost org doc libs 1 55 0 libs python doc tutorial doc html python hello html关于为 Windows 的 python 包装
  • 解释 scipy.stats.entropy 值

    我正在尝试使用scipy stats 熵来估计库尔巴克 莱布勒 KL 两个分布之间的散度 更具体地说 我想使用 KL 作为衡量标准来确定两个分布的一致性 但是 我无法解释 KL 值 例如 t1 numpy random normal 2 5
  • 无法运行特定的 .pyc 文件

    使用编译在unix工作的python文件后 import py compile py compile compile server py 我在同一目录中获得 pyc 文件 但是当我尝试在 putty 中使用 server pyc 运行该文件
  • 如何将多索引数据帧与单个索引数据帧连接?

    df1 的单个索引与 df2 的多索引的子级别匹配 两者都有相同的列 我想将 df1 的所有行和列复制到 df2 它类似于这个线程 将单索引 DataFrame 复制到多索引 DataFrame https stackoverflow co
  • 如何使用 Misc.imread 将图像分割为红色、绿色和蓝色通道

    我正在尝试将图像切片为 RGB 但在绘制这些图像时遇到问题 我使用此函数从某个文件夹获取所有图像 def get images path image type image list for filename in glob glob pat
  • 如何更改 PyGame 中声音或音乐的音量?

    如何更改 PyGame 中的音量 例如通过设置更改音量 我制作了 UI 元素 只需要知道如何更改音量即可 我知道我说不清楚 但你可以理解我 请帮忙 更改音量取决于您是否正在播放pygame mixer Sound https www pyg
  • Python:ConfigParser.NoSectionError:没有部分:“TestInformation”

    我使用上面的代码收到 ConfigParser NoSectionError No section TestInformation 错误 def LoadTestInformation self config ConfigParser Co

随机推荐

  • 时代选出最重要 AI 100人,多位华人上榜

    来源 Time 链接 https time com collection time100 ai 编译 芯芯 编辑 靖宇 这是 AI 的时代 2022 年 没人能预料到 以大模型为代表的人工智能技术 成为这个时代独撑科技行业上行的力量 在这一
  • kubectl exec

    文章目录 kubectl exec 通过bash获得pod中某个容器的TTY 相当于登录容器 命令行 创建一个test文件 kubectl exec exec命令同样类似于docker的exec命令 为在一个已经运行的容器中执行一条shel
  • 模型的“参数”与“超参数”

    目录 前言 一 参数 与 超参数 二 模型训练与最终模型 三 参考文献 前言 起初由于团队项目临时需要 花了个一两天的时间直接仓促上手Machine Learning 最近回顾机器学习的模型评估与选择方面的内容时 才幡然发现在初识机器学习阶
  • 小程序发布后图片不显示问题

    本地图片能正常显示 发布后图片不显示 http 127 0 0 1 49287 pageframe static img apply 20 11 png 修改后 http 127 0 0 1 49287 pageframe static i
  • 获取table中的所有行中的td值,包括input值和select值等

    首先获取表对象document getElementById onceFeeTableId 然后通过循环可以获取所有的行 tableObj rows i 如果有需要可在循环里面再加一个循环 用来循环所有的列 HTML table class
  • 【Mysql 存储过程 Or 存储函数 傻傻分不清? 】

    MySQL的存储函数 自定义函数 和存储过程都是用于存储SQL语句的 但是什么时候用什么呢 是不是总是傻傻的分不清 本文来详细的讲一下存储函数 和存储过程 以后再也不会迷糊 存储函数 存储过程 一 异同点 二 存储函数 语法 三 存储过程
  • Ubuntu 20.04上安装和配置MySql5.7

    此博客作为学习笔记使用 仅供用于学习 勿用于任何非法用途 Ubuntu换源 ubuntu 20 04系统自带源直接安装是MySQL 8 0 我要安装MySQL 5 7的版本的所以先进行换源 1 1 备份原来的sorce文件 sudo cp
  • 深度之眼(四)——Python基本数据类型

  • 使用NPM发布uni-app,Vue自定义组件

    使用NPM发布uni app以及vue自定义组件 使用npm install 安装他人发布的组件平时用的比较多 操作也比较简单 最近自己捣鼓了一下 如何发布自己的自定义组件方便自己和他人使用npm install 安装 编写组件 第一步是本
  • 多线程进阶(下)

    目录 一 JUC 二 线程安全的集合类 三 死锁 一 JUC 这里的juc指的是java util concurrent 并发 多线程相关的 一个标准库中的类 下面是JUC里面的常见类 Callable 这是一个interface 也是一种
  • 样本选择模型 & 处理效应模型

    一 样本选择偏差与自选择偏差 样本选择偏差 样本选择偏差的非随机选择机制在于对样本的选择不随机 在样本数据的采集过程中 只对某部分群体进行调查 但这部分群体与其他群体在某些方面的特征差异较大 因此根据这样的样本做回归得到的普适性结论并不可信
  • iOS自定义下拉刷新控件

    自定义下拉刷新控件 概述 用了很多的别人的下拉刷新控件 想写一个玩玩 自定义一个在使用的时候也会比较有意思 使应用更加的灵动一些 毕竟谁不喜欢各种动画恰到好处的应用呢 使用方式如下 tableview refreshControl XRef
  • 运维实践

    欢迎关注 WeiyiGeek 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 全栈实践 再到 放弃学习 涉及 网络安全运维 应用开发 物联网IOT 学习路径 个人感悟 等知识 花开堪折直须折 莫待无花空折枝 作者主页 ht
  • 初级1 题目二 选择排序

    1 选择排序和冒泡排序很类似 不过冒泡排序是两两比较 每次确定一个元素的位置 而选择排序是一个和其他所有未确定的元素进行比较 然后确定位置 include
  • 如何提高影响力?

    一 什么是影响力 1 通俗的讲 影响力就是影响他人的能力 二 为什么需要提高 1 可以让工作更高效 2 可以让生活更惬意 三 提高影响力的切入点 1 乐于助人与虚心求教 1 1 每个人都会遇到困难 在别人遇到困难的时候 帮助其一下 不要担心
  • js 数组根据字段分组

    在平时的开发中 难免会遇到需要对接口获取的数据进行处理 例如以下数据 const arr a 系列1 b 2 c 3 a 系列2 b 2 c 3 a 系列3 b 2 c 3 我们需要对a字段进行分组 将b和c字段单独取出来 那么我们就可以用
  • 微信小程序注册入口和注册流程(完整版图文教程)

    微信小程序注册是免费的 在腾讯云微信公众平台即可注册 无论是个人 企业都可以免费注册微信小程序 先输入邮箱注册激活 然后填写主体类型对应的证件信息 最后管理员身份验证使用维信扫一扫即可 小程序5来详细说下微信小程序注册入口和微信小程序注册流
  • 下载Android特定模块的源代码

    原文地址 http www apkbus com android 18828 1 1 html 开发中要模仿Android系统中某些应用的特性 需查看其源代码 关于Android源码的介绍见 http source android com
  • Go依赖管理及Go module使用

    目录 一 依赖管理 二 为什么需要依赖管理 三 godep 3 1 安装 3 2 基本命令 3 3 使用godep 3 4 vender机制 3 5 godep开发流程 四 go module 4 1 GO111MODULE 4 2 GOP
  • 周杰伦演唱会总是抢不到票?教你用Python做一个自动抢票脚本

    相信想去周董演唱会的大家都用过大麦网抢票吧 可是 抢不到啊 该说不说 我抢到了 那么 今天带大家用Python来制作一个自动抢票的脚本小程序 知识点 面向对象编程 selenium 操作浏览器 pickle 保存和读取Cookie实现免登陆
Powered by Hwhale