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

390 篇文章 2 订阅
182 篇文章 2 订阅
相信想去周董演唱会的大家都用过大麦网抢票吧?

可是

抢不到啊

该说不说 我抢到了

本文源码、其他python资料电子书: 扣扣qun 540305994

图片

图片

图片

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

知识点:

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

开发环境:

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

先导入本次所需的模块

import osimport timeimport picklefrom time import sleepfrom selenium import webdriver

另外怕大家不会使用,直接给大家准备了写好的,直接下载打开即可使用!
源码放在百度云盘上了需要可以微信扫描下方CSDN官方认证二维码免费领取

### 第一步,实现免登录

确定目标,设置全局变量

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技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

一、Python学习大纲

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

二、Python必备开发工具

在这里插入图片描述

三、入门学习视频

四、实战案例

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

五、python副业兼职与全职路线

在这里插入图片描述

在这里插入图片描述

👉[[CSDN大礼包:《python兼职资源&全套学习资料》免费分享]]安全链接,放心点击

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值