1721515899
2024-07-20 22:44:17
TLDR; チケットの空き状況を約15秒ごとにチェックし、チケットが利用可能になるとテキストとメールを送信するチケットボットの作り方を説明します。私はこのチケットボットを使ってセントヘレンズ山の登山許可証を購入しました。GitHubコードをご覧ください。 ここ。
活火山でのハイキングは、ずっと私のやりたいことリストにありました。そこで、シアトルで夏を過ごしたとき、7 月 4 日に友人とセント ヘレンズ山にハイキングに行くことにしました。ところが、その日が近づくにつれて、公園管理局が許可証システムを採用しており、各日の 1 か月前にわずか数分で売り切れてしまうことに気づきました。7 月 4 日はおろか、その月全体でも許可証がまったくありませんでした。
すべてが失われたと思ったとき、一筋の希望の光が見えました。許可証の空き状況ページを更新したところ、ハイカーが予約をキャンセルしたり、他の人が購入したりして、空きが散発的に開いたり閉じたりしているのに気づきました。ハイキングの前に許可証がいくつか空くかもしれないと期待し、間に合うように友人と私の許可証を手に入れました。しかし、このハイキングには行きたい気持ちはあったものの、セントヘレンズ山の許可証ページを更新するのには、今後 1 週間半を費やすことができませんでした。そこで登場したのが、チケット ボットです。
この記事では、チケットの空き状況を約15秒ごとにウェブサイトで自動的にチェックし、チケットが利用可能になるとメールとテキストを送信するチケットボットの作成方法を説明します。すべてのコードは私のGitHubで入手できます。 ここ。
チケット ボットは、Web サイトで実行する操作を自動化するコードです。たとえば、チケット ボットで特定の日付のチケットの空き状況を確認する場合は、Web サイトに移動し、希望の日付を入力して、希望する数のチケットが利用可能かどうかを確認するコードを作成します。これは、実際に実行する手順とまったく同じです。
チケット ボットは、希望する日付に希望する数のチケットが購入可能であることを確認すると、(購入を完了するために実行するのと同じ手順を再度実行して)購入を完了するか、チケットが購入可能であることを通知します。ここでは、チケットが購入可能になったときにチケット ボットが電子メールとテキスト通知を送信して、手動で購入を完了できるようにする方法を説明します。
チケット ボットは私たちが行うすべての作業を自動化するため、許可証の可用性を確認するために手動で行うすべての手順を詳細に記述する必要があります。セント ヘレンズ山の例では、私たち (およびボット) が実行する手順は次のとおりです。
1. ブラウザでウェブサイトのURLに移動します
2. 必要な許可の数を入力します(ここでは「グループメンバー」)
3. 正しい月に移動します(ここでは「8月」)
4. 希望する日(ここでは15日)に許可証が利用可能かどうかを確認します。
5. 許可が取得できる場合: 電子メールとテキストで通知します。許可が取得できない場合: 手順 1 から繰り返します。
以下は疑似コードの実装です。
# Imports
Import necessary librariesFunction check_permit_availability(group_size, month, day, year, url):
Log the current time
Setup and open a headless browser
Go to the provided URL
Wait for the page to load
Try:
Click the button to add group members
Catch error:
Log the error
Try:
If the desired month is in the future:
Click to change the month
Catch error:
Log the error
Format the desired date
Try:
Check if the desired date is available
If available:
Log availability
Send email notification
Catch error:
Log that the date is not available
Close the browser
Function send_email_notification(spots, date, url):
For each email address:
Send an email notification
Function main(args):
Schedule the permit check to run periodically
While True:
Run scheduled permit check
Wait for a short time to not overwork computer
If an email was sent:
Exit the loop
if __name__=='__main__':
Read the configuration file
Set up email details
Initialize logging
Initialize email_sent flag
Call main function with arguments
このコードで最も難しい部分は、ボタンのクリックなどのウェブサイト上のアクションに対応するHTML要素を特定することです。これを行うには、通常クリックするウェブサイトの部分にマウスを移動しますが、左クリックではなく右クリックして「検査」をクリックします。これにより、対応するHTMLが表示されます。Pythonコードでは、この特定のHTML要素を参照して操作する必要があります。HTML要素を参照する方法はいくつかありますが、 XPath 最も簡単でエラーが発生しにくいです。
例として、以下にグループ メンバーを増やすために「+」ボタンをクリックすることに対応する HTML 要素を見つける GIF を示します。HTML 要素にマウスを移動すると、Web サイトの対応する部分が強調表示されることに注意してください。その下には、その HTML 要素を自動的に「クリック」するための対応する Python コードがあります。
#open up chrome
options = webdriver.ChromeOptions()
options.add_argument('--headless') # Run headless Chrome. comment out to see the browser actually open.
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.get(url)#find the Group Member "+" button and click it
group_button_xpath = "//button[@data-component='Button' and @type='button' and contains(@class, 'sarsa-button') and contains(@class, 'sarsa-button-subtle') and contains(@class, 'sarsa-button-sm') and @aria-label='Add members']"
group_button = driver.find_element(By.XPATH, group_button_xpath)
for _ in range(group_size):
group_button.click() #click the plus button once
手動で「クリック」または操作する Web サイトの各部分に対して、上記と同様の Python コードを記述する必要があります。ただし、それが完了したら、チケット ボットを実行して、通常どおり約 15 秒ごとにチケットの空き状況を確認する様子を確認できます。
このチケット ボットのアプローチは非常に脆弱であることに注意してください。Web サイトが HTML を変更したり、自動アクセスをブロックするチェックを実装したりする場合は、回避策を見つける必要があります。
チケット ボットは目新しいものではありません。すでに作成方法を知っている人は既に使用しており、作成方法を知らない人にとっては、屋外で過ごしたり、友人と夜遊びを楽しんだりできる新しい技術スキルを学ぶ絶好の機会です。必要以上のチケットを購入して、他の人の楽しい計画を台無しにしないでください。
#独自のチケットボットを構築する方法要約 #チケットの作成方法を説明します #ベンラーナー #年 #月