亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

教你用Python來制作一個(gè)自動(dòng)搶票的腳本小程序

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

此次知識(shí)點(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í)候 會(huì)幫助我記錄我們的登陸信息
    set_cookie 登陸成功之后 cookie會(huì)發(fā)生變化
    后續(xù)搶票: 直接使用我們記錄好的登陸信息
    get_cookie

  • 搶票并且下單

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

from selenium import webdriver  # 操作谷歌瀏覽器 需要額外安裝的 并且現(xiàn)在安裝這個(gè)模塊得指定版本 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("###請(qǐng)點(diǎn)擊登錄###")
    while self.driver.title.find('大麥網(wǎng)-全球演出賽事官方購票平臺(tái)') != -1:
        sleep(1)
    print('###請(qǐng)掃碼登錄###')
    while self.driver.title != '大麥網(wǎng)-全球演出賽事官方購票平臺(tái)-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)識(shí)
    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í)無法完成自動(dòng)化
                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'):
                # 座位手動(dòng)選擇 選中座位之后//*[@id="app"]/div[2]/div[2]/div[1]/div[2]/img 就會(huì)消失
                print('請(qǐng)快速的選擇您的座位?。?!')
            # 消失之后就會(huì)出現(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):
![請(qǐng)?zhí)砑訄D片描述](https://img-blog.csdnimg.cn/4a0b661782e24b8ebf46390fb2333452.gif)
    if self.status in [3,4,5]:
        print('###開始確認(rèn)訂單###')
        try:
            # 默認(rèn)選第一個(gè)購票人信息
            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)  # 太快會(huì)影響加載,導(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()

測(cè)試代碼

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

效果

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

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

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

相關(guān)文章

  • Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn)

    Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn)

    這篇文章主要介紹了Django Haystack 全文檢索與關(guān)鍵詞高亮的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python使用argcomplete模塊實(shí)現(xiàn)自動(dòng)補(bǔ)全

    Python使用argcomplete模塊實(shí)現(xiàn)自動(dòng)補(bǔ)全

    argcomplete?是一個(gè)強(qiáng)大的Python庫,可以大幅改善命令行應(yīng)用程序的用戶體驗(yàn),本文主要介紹了argcomplete模塊的相關(guān)用法,感興趣的小伙伴可以了解下
    2023-11-11
  • Python枚舉之Enum模塊的原理與應(yīng)用詳解

    Python枚舉之Enum模塊的原理與應(yīng)用詳解

    前段時(shí)間在閱讀別人的代碼時(shí),看到代碼中有好多數(shù)字,雖然增加的注釋,哪個(gè)值代表哪種狀態(tài),但還是看起來很難受,不優(yōu)雅,如何改善這個(gè)問題呢?當(dāng)然是枚舉,本文將深入探討Python枚舉中的Enum模塊,需要的朋友可以參考下
    2023-11-11
  • 一文帶你解密Python可迭代對(duì)象的排序問題

    一文帶你解密Python可迭代對(duì)象的排序問題

    這篇文章主要為大家詳細(xì)介紹一下Python中可迭代對(duì)象的排序問題,文中的示例代碼講解詳細(xì),對(duì)我們深入了解Python有一定幫助,感興趣的可以了解一下
    2022-07-07
  • python dict 相同key 合并value的實(shí)例

    python dict 相同key 合并value的實(shí)例

    今天小編就為大家分享一篇python dict 相同key 合并value的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python?flask框架post接口調(diào)用示例

    Python?flask框架post接口調(diào)用示例

    這篇文章主要介紹了Python?flask框架post接口調(diào)用,結(jié)合實(shí)例形式分析了基于flask框架的post、get請(qǐng)求響應(yīng)及接口調(diào)用相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • python獲取word文檔總頁數(shù)的兩種方法

    python獲取word文檔總頁數(shù)的兩種方法

    這篇文章主要介紹了python獲取word文檔的總頁數(shù)的兩種方法,文中給出了兩種解決方案,兩種方案也都各有優(yōu)缺點(diǎn),可能也不一定是完全準(zhǔn)確的,需要的朋友可以參考下
    2024-03-03
  • python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)

    python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)

    在本篇內(nèi)容里小編給大家總結(jié)的是一篇關(guān)于python中Task封裝協(xié)程的知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-07-07
  • python tkinter之 復(fù)選、文本、下拉的實(shí)現(xiàn)

    python tkinter之 復(fù)選、文本、下拉的實(shí)現(xiàn)

    這篇文章主要介紹了python tkinter之 復(fù)選、文本、下拉的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 利用Python實(shí)現(xiàn)RSA加密解密方法實(shí)例

    利用Python實(shí)現(xiàn)RSA加密解密方法實(shí)例

    過去幾天我一直在嘗試用Python實(shí)現(xiàn)RSA算法,下面這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)RSA加密解密的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評(píng)論