ジェイ・チョウのコンサートのチケットが手に入らないのですが?Python を使用して自動チケット取得スクリプトを作成する方法を教えてください。

ジェイ・チョウのコンサートに行きたい人は皆、Damai.com を利用してチケットを手に入れたことがあると思います。

しかし

取れません

分かったと言うべきか

ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

そこで、今日は Python を使用してチケットを自動的に取得するスクリプト アプレットを作成する方法を説明します。

知識ポイント:

  • オブジェクト指向プログラミング

  • Selenium操作ブラウザ

  • pickle は Cookie を保存および読み取り、ログイン不要を実現します

  • 遅延操作を行う時間

  • 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

クッキーを取得する

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()

2番目のステップはチケットを入手して注文することです

要素が存在するかどうかを判断する

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 学習教材の完全なセットを全員で共有します。

1.Pythonの全方位学習ルート

Python の全方位ルートは、Python の一般的に使用される技術的なポイントを整理して、さまざまな分野の知識ポイントをまとめることです。その有用性は、上記の知識ポイントに応じて、対応する学習リソースを見つけて確実に学習できることにあります。より包括的に。

2. 学習ソフト

労働者が良い仕事をしたいなら、まず道具を研ぐ必要があります。Python を学習するために一般的に使用される開発ソフトウェアがここにあり、時間を大幅に節約できます。

3. 入門学習ビデオ

動画を見て学ぶ場合、手を使わずに目や頭を動かすだけではなく、理解した上で使うという科学的な学習方法があり、このような時にハンズオンプロジェクトは非常に適しています。

4. 実践事例

光学理論は役に立たず、それに従って学ぶ必要があり、学んだことを実践に応用できるように自分でやる必要がありますが、このとき、いくつかの実戦事例から学ぶことができます。

5. インタビュー資料

高収入の仕事を見つけるには Python を学ばなければなりません。以下の面接の質問は、アリ、テンセント、バイトなどの第一線のインターネット企業からの最新の面接資料であり、アリの上司が権威ある回答をしています。このセットを終えた後、面接資料は誰もが満足のいく仕事を見つけることができると信じています。


Python 学習教材のフルセットのこの完全版は CSDN にアップロードされています。必要な場合は、WeChat で以下の CSDN 公式認定の QR コードをスキャンして無料で入手できます【保证100%免费

おすすめ

転載: blog.csdn.net/Python_cocola/article/details/129879007#comments_26543887