How to get a Pokémon Cafe reservation in Japan using Python

Patrick Leung
3 min readApr 17, 2023

--

For parents with kids that are Pokémon fans, visiting the Pokémon Cafe is something on your Tokyo must-do list. There is a Pikachu performance as part of your meal, and you can purchase exclusive merchandises in the cafe.

Pikachu Meal
Snorlax Meal

Due to its extreme popularity, it’s often fully booked, so the online reservation system is necessary if you want to visit. Pokémon Cafe reservations open at 6 pm JST, a month before the date you want to book. Everything is fully booked within seconds after it hits 6 pm JST — an incredibly stressful experience.

Fully booked in seconds

After my wife and I failed for two consecutive days, and it was our last chance to get a place, I decided to take more drastic action and write some Python code to automate this process.

Step 1: Download the Chrome driver

The first step is to download the web driver for the browser you will use for automation. Check for the browser version in your browser settings and download the web driver that matches your browser version.

%%bash
pip3 install selenium
wget https://chromedriver.storage.googleapis.com/99.0.4844.17/chromedriver_mac64_m1.zip --quiet
unzip chromedriver_mac64_m1.zip

Step 2: Import Selenium

The code required a Python library called Selenium. It’s a powerful library and pretty straightforward, especially when no user login or payment is necessary to make a reservation.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import NoSuchElementException

Step 3: Define the functions for creating the reservation

Here’s a simple function:

  • Open the webpage.
  • Click the reservation button.
  • Agree to the T&C.
  • Select the number of guests.
  • Select the date.
def create_booking(day_of_month, num_of_guests):
'''Create a reservation for Pokemon Cafe in Tokyo
Keyword arguments:
day_of_month -- day of the month to book
num_of_guests -- number of guests to book (1-8)
'''

website = "https://reserve.pokemon-cafe.jp/"
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
chromedriver = "chromedriver"
driver = webdriver.Chrome(chromedriver, options=chrome_options)
driver.get(website)

try:
# 席の予約 HTML 1 - Make a reservation
driver.find_element(By.XPATH, "//*[@class='button arrow-down']").click()

# 席の予約 HTML 2 - Agree T&C
driver.find_element(By.XPATH, "//*[@class='agreeChecked']").click()
driver.find_element(By.XPATH, "//*[@class='button']").click()

# 席の予約 HTML 3 - Select number of guest
select = Select(driver.find_element(By.NAME, 'guest'))
select.select_by_index(num_of_guests)

# 席の予約 HTML 4 - Select from calendar
driver.find_element(By.XPATH, "//*[contains(text(), '次の月を見る')]").click()
driver.find_element(By.XPATH, "//*[contains(text(), " + str(day_of_month) + ")]").click()
driver.find_element(By.XPATH, "//*[@class='button']").click()
except NoSuchElementException:
pass

Step 4: Create the reservation

Then call this function. You can adapt the exact day you want to book and adjust the number of iterations accordingly.

num_iterations = 1
day_of_month='18'
num_of_guests=5

[create_booking(day_of_month, num_of_guests) for x in range(num_iterations)]

Step 5: Manually complete the reservation

I have set the browser to remain open for me to complete the remaining steps manually. I’ve decided not to completely automate the steps afterwards as it only need to do this once. If you pass this step, no credit card is required to book the reservation. You must enter your name, phone number, country code, and email address.

Conclusion

And that’s it. That’s how I booked a Pokémon Cafe reservation in Japan. This solution made the day for us, and we had great fun in the Pokemon Cafe. It’s not a guaranteed process, but it saved us time doing this manually. You could parallelise the process to increase your chance, but I would not recommend this.

The complete code are in my Github repo. If you still don’t manage to get a place with this method, it might be a blessing in disguise as we spent so much on the exclusive merchandises and the meals. Good luck!

--

--