最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你用Python來制作一個自動搶票的腳本小程序

 更新時(shí)間:2023年07月30日 16:59:21   作者:魔王不會哭  
大麥網(wǎng),是中國綜合類現(xiàn)場娛樂票務(wù)營銷平臺,業(yè)務(wù)覆蓋演唱會、 話劇、音樂劇、體育賽事等領(lǐng)域,但是因?yàn)槠睌?shù)有限,還有黃牛們不能丟了飯碗,所以導(dǎo)致了,很多人都搶不到票,那么,今天帶大家用Python來制作一個自動搶票的腳本小程序,需要的朋友可以參考下

此次知識點(diǎn):

  • 面向?qū)ο缶幊?/li>
  • selenium 操作瀏覽器
  • pickle 保存和讀取Cookie實(shí)現(xiàn)免登陸
  • time 做延時(shí)操作
  • os 創(chuàng)建文件,判斷文件是否存在

開發(fā)環(huán)境:

  • 版 本:anaconda5.2.0(python3.6.5)
  • 編輯器:pycharm

python安裝包 安裝教程視頻

pycharm 社區(qū)版 專業(yè)版 及 激活碼

視頻教程

第三方庫:

  • selenium >>> pip install selenium==3.4.1

步驟

  • 實(shí)現(xiàn)免登陸
    第一次登陸的時(shí)候 會幫助我記錄我們的登陸信息
    set_cookie 登陸成功之后 cookie會發(fā)生變化
    后續(xù)搶票: 直接使用我們記錄好的登陸信息
    get_cookie

  • 搶票并且下單

首先導(dǎo)入本次所需的模塊

from selenium import webdriver  # 操作谷歌瀏覽器 需要額外安裝的 并且現(xiàn)在安裝這個模塊得指定版本 3.4
from time import sleep
import pickle  # 保存和讀取cookie實(shí)現(xiàn)免登錄的工具
import os   # 操作文件的模塊

第一步,實(shí)現(xiàn)免登錄

確定目標(biāo),設(shè)置全局變量

# 大麥網(wǎng)主頁
damai_url = "https://www.damai.cn/"
# 登錄頁
login_url = "https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F"
# 搶票目標(biāo)頁
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         # 狀態(tài),表示如今進(jìn)行到何種程度
        self.login_method = 1   # {0:模擬登錄,1:Cookie登錄}自行選擇登錄方式
        self.driver = webdriver.Chrome(executable_path='chromedriver.exe')        # 默認(rèn)Chrome瀏覽器

登錄調(diào)用設(shè)置cookie

def set_cookie(self):
    self.driver.get(damai_url)
    print("###請點(diǎn)擊登錄###")
    while self.driver.title.find('大麥網(wǎng)-全球演出賽事官方購票平臺') != -1:
        sleep(1)
    print('###請掃碼登錄###')
    while self.driver.title != '大麥網(wǎng)-全球演出賽事官方購票平臺-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"))  # 載入cookie
        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'):                     
            # 如果不存在cookie.pkl,就獲取一下
                self.set_cookie()
            else:
                self.driver.get(target_url)
                self.get_cookie()

打開瀏覽器

def enter_concert(self):
    """打開瀏覽器"""
    print('###打開瀏覽器,進(jìn)入大麥網(wǎng)###')
    # self.driver.maximize_window()           # 最大化窗口
    # 調(diào)用登陸
    self.login()                            # 先登錄再說
    self.driver.refresh()                   # 刷新頁面
    self.status = 2                         # 登錄成功標(biāo)識
    print("###登錄成功###")
    # 后續(xù)德云社可以講
    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("###開始進(jìn)行日期及票價(jià)選擇###")
        while self.driver.title.find('確認(rèn)訂單') == -1:           # 如果跳轉(zhuǎn)到了訂單結(jié)算界面就算這步成功了,否則繼續(xù)執(zhí)行此步
            try:
                buybutton = self.driver.find_element_by_class_name('buybtn').text
                if buybutton == "提交缺貨登記":
                    # 改變現(xiàn)有狀態(tài)
                    self.status=2
                    self.driver.get(target_url)
                    print('###搶票未開始,刷新等待開始###')
                    continue
                elif buybutton == "立即預(yù)定":
                    self.driver.find_element_by_class_name('buybtn').click()
                    # 改變現(xiàn)有狀態(tài)
                    self.status = 3
                elif buybutton == "立即購買":
                    self.driver.find_element_by_class_name('buybtn').click()
                    # 改變現(xiàn)有狀態(tài)
                    self.status = 4
                # 選座購買暫時(shí)無法完成自動化
                elif buybutton == "選座購買":
                    self.driver.find_element_by_class_name('buybtn').click()
                    self.status = 5
            except:
                print('###未跳轉(zhuǎn)到訂單結(jié)算界面###')
            title = self.driver.title
            if title == '選座購買':
                # 實(shí)現(xiàn)選座位購買的邏輯
                self.choice_seats()
            elif title == '確認(rèn)訂單':
                while True:
                    # 如果標(biāo)題為確認(rèn)訂單
                    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'):
                # 座位手動選擇 選中座位之后//*[@id="app"]/div[2]/div[2]/div[1]/div[2]/img 就會消失
                print('請快速的選擇您的座位?。?!')
            # 消失之后就會出現(xiàn) //*[@id="app"]/div[2]/div[2]/div[2]/div
            while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[2]/div'):
                # 找到之后進(jìn)行點(diǎn)擊確認(rèn)選座
                self.driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div[2]/button').click()

下單

def check_order(self):
![請?zhí)砑訄D片描述](https://img-blog.csdnimg.cn/4a0b661782e24b8ebf46390fb2333452.gif)
    if self.status in [3,4,5]:
        print('###開始確認(rèn)訂單###')
        try:
            # 默認(rèn)選第一個購票人信息
            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)  # 太快會影響加載,導(dǎo)致按鈕點(diǎn)擊無效
        self.driver.find_element_by_xpath('//div[@class = "w1200"]//div[2]//div//div[9]//button[1]').click()

搶票成功, 退出當(dāng)前程序

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

測試代碼

if __name__ == '__main__':
    try:
        con = Concert()             # 具體如果填寫請查看類中的初始化函數(shù)
        con.enter_concert()         # 打開瀏覽器
        con.choose_ticket()         # 開始搶票
    except Exception as e:
        print(e)
        con.finish()

效果

好了,我的這篇文章寫到這里就結(jié)束啦!

希望你在python這條路上依心而行,別回頭,別四顧。一如既往不改初見的模樣,未來的路很長,不管怎樣,一定要相信自己一直走下去。

以上就是教你用Python來制作一個自動搶票的腳本小程序的詳細(xì)內(nèi)容,更多關(guān)于Python自動搶票腳本的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PyTorch中改變張量形狀的幾種方法小結(jié)

    PyTorch中改變張量形狀的幾種方法小結(jié)

    在深度學(xué)習(xí)領(lǐng)域,PyTorch 是一個廣泛使用的框架,它提供了豐富的API來處理張量(tensor),在模型開發(fā)過程中,我們經(jīng)常需要改變張量的形狀以滿足特定的需求,本文將介紹在 PyTorch 中改變張量形狀的幾種方法,需要的朋友可以參考下
    2025-02-02
  • Conda環(huán)境導(dǎo)出與導(dǎo)入的實(shí)現(xiàn)

    Conda環(huán)境導(dǎo)出與導(dǎo)入的實(shí)現(xiàn)

    本文主要介紹了Conda環(huán)境導(dǎo)出與導(dǎo)入的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python中函數(shù)參數(shù)匹配模型詳解

    Python中函數(shù)參數(shù)匹配模型詳解

    這篇文章主要介紹了Python函數(shù)參數(shù)匹配模型,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Python PyQt5實(shí)戰(zhàn)項(xiàng)目之文件拷貝器的具體實(shí)現(xiàn)詳解

    Python PyQt5實(shí)戰(zhàn)項(xiàng)目之文件拷貝器的具體實(shí)現(xiàn)詳解

    PyQt5以一套Python模塊的形式來實(shí)現(xiàn)功能。它包含了超過620個類,600個方法和函數(shù)。本篇文章手把手帶你用PyQt5實(shí)現(xiàn)一個簡單的文件拷貝器,大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法

    這篇文章主要介紹了python實(shí)現(xiàn)搜索指定目錄下文件及文件內(nèi)搜索指定關(guān)鍵詞的方法,可實(shí)現(xiàn)針對文件夾及文件內(nèi)關(guān)鍵詞的搜索功能,需要的朋友可以參考下
    2015-06-06
  • Python中的復(fù)制、淺拷貝與深拷貝解讀

    Python中的復(fù)制、淺拷貝與深拷貝解讀

    這篇文章主要介紹了Python中的復(fù)制、淺拷貝與深拷貝解讀,對于可變對象,賦值是最簡單省事的,如b=a,意思是直接使得a指向b代表的對象,兩者id一樣,指向同一個對象,一個修改,另一個也隨之變化,需要的朋友可以參考下
    2023-11-11
  • Pycharm中無法使用pip安裝的包問題解決方案

    Pycharm中無法使用pip安裝的包問題解決方案

    本文主要介紹了Pycharm中無法使用pip安裝的包問題解決方案,在終端通過pip裝好包以后,在pycharm中導(dǎo)入包時(shí),依然會報(bào)錯,下面就來介紹一下解決方法
    2023-09-09
  • python實(shí)戰(zhàn)之德州撲克第二步-判斷牌型

    python實(shí)戰(zhàn)之德州撲克第二步-判斷牌型

    這篇文章主要介紹了python實(shí)戰(zhàn)之德州撲克第二步-判斷牌型,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python語法筆記之Python?raise語句用法詳解

    python語法筆記之Python?raise語句用法詳解

    在Python編程中raise語句是處理異常機(jī)制的核心組成部分,它賦予開發(fā)者主動拋出異常的能力,能夠精確地控制程序在特定條件下的行為,增強(qiáng)代碼的健壯性和可維護(hù)性,這篇文章主要介紹了python語法筆記之Python?raise語句用法的相關(guān)資料,需要的朋友可以參考下
    2026-01-01
  • 解決python寫入帶有中文的字符到文件錯誤的問題

    解決python寫入帶有中文的字符到文件錯誤的問題

    今天小編就為大家分享一篇解決python寫入帶有中文的字符到文件錯誤的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01

最新評論

海林市| 甘谷县| 普宁市| 景泰县| 遂川县| 济宁市| 修文县| 青川县| 临潭县| 冀州市| 博客| 赤峰市| 育儿| 师宗县| 张家界市| 重庆市| 郴州市| 绥化市| 宝应县| 石景山区| 阜城县| 德昌县| 文登市| 金山区| 留坝县| 信丰县| 宝山区| 界首市| 双城市| 贵阳市| 漠河县| 留坝县| 桃江县| 黔东| 当阳市| 青河县| 岳阳市| 乌什县| 柳林县| 安福县| 江油市|