こんにちは。
今回は Python+Seleniumでディズニーのレストラン予約キャンセル拾いを自動化しようとして盛大に詰まった話 を共有します😇
同じように
という方、たぶん同じ罠にハマってます。
ここまでは順調でした。
検索ボタンを押すと…
🤔
人間が普通に操作すると問題なく検索できるのに、
Selenium経由だと固まるという非常に厄介な状態。
time.sleep(10) を増やすpage_load_timeout を伸ばす👉 全部ダメでした😇
ディズニーの予約ページは、
page_load_timeout は 一切役に立たないつまり…
「ページがロードされるのを待つ」
ではなく
「状態が変わるのを待つ」必要がある
というのが最大の落とし穴でした。
search_btn.click()
time.sleep(10)
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 30)
# 検索ボタンをクリック
search_btn.click()
# Loading表示が出るのを待つ
wait.until(
EC.presence_of_element_located(
(By.XPATH, "//*[contains(text(), 'Loading')]")
)
)
# Loadingが消えるのを待つ
wait.until(
EC.invisibility_of_element_located(
(By.XPATH, "//*[contains(text(), 'Loading')]")
)
)
✨ 「出現 → 消滅」の2段階待ち
これだけで一気に安定しました。
さらに調べると…
403 Forbidden429 Too Many Requestsというケースもありました。
logs = driver.get_log("browser")
for log in logs:
print(log)
または(Chrome限定)👇
opts.set_capability("goog:loggingPrefs", {"performance": "ALL"})
📌 ここで403や429が出ていたら
→ サイト側で 自動操作・高頻度アクセス制限 が入っている可能性大。
これもかなりハマりました。
headless=True → Loadingで止まるoptions.add_argument("--headless") # ← 一旦コメントアウト
✔ 動くなら
→ 待ち条件 or 描画タイミング依存の問題。
✅ 私が最終的に採用したポイント
time.sleep() は使わないdriver.save_screenshot("timeout_debug.png")
ディズニーの予約・チケット系ページは、
が非常に厳しいです⚠
👉 本番運用する場合は
この辺は必ず意識した方が安全です。
❌ Seleniumが壊れている
⭕ 待ち方が間違っている or 裏通信が失敗している
ここを理解すると、一気に突破できます💪