Skip to content

Instantly share code, notes, and snippets.

@kingspp
Last active October 13, 2023 01:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kingspp/626534f456b089f55089e61663056ba5 to your computer and use it in GitHub Desktop.
Save kingspp/626534f456b089f55089e61663056ba5 to your computer and use it in GitHub Desktop.
Search and locate latest appointments for RMV. Needs Python v3.5+. Tested on Mac and Linux Environments
# %% [markdown]
# RMV Appointment Finder v1.0
# %%
# Install Required Libraries
# !python3 -m pip install selenium pandas tqdm webdriver-manager -q
#
# Execution:
# python3 us_rmv_appointment_finder.py
#
# %% [markdown]
# # Configure Browser
# %%
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from tqdm import tqdm
import pandas as pd
# CHROMEDRIVER_PATH = "/Users/prathyushsp/Git/nb/chromedriver"
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
browser = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)
# %% [markdown]
# # Navigate Options
# %%
print("Loading RMV website . . .")
browser.get('https://rmvmassdotappt.cxmflow.com/Appointment/Index/2c052fc7-571f-4b76-9790-7e91f103c408')
elems = browser.find_elements(By.CLASS_NAME,"ui-selectable")
print("Available Options in UI 1: ")
for elem in elems:
print(elem.text)
print(f"\nSelecting UI Option 1: {elems[0].text}\n")
elems[0].click()
# %%
elems = browser.find_elements(By.CLASS_NAME,"ui-selectable")
print("Available Options in UI 2: ")
for elem in elems:
print(elem.text)
print(f"\nSelecting UI Option 2: {elems[1].text}\n")
elems[1].click()
# %% [markdown]
# # Check Location Dates
# %%
location_date_map = {}
def check_location_date():
elems = browser.find_elements(By.CLASS_NAME,"DateTimeGrid-Column")
for e, elem in enumerate(elems):
d = elem.text.split("\n")
if len(d)>=2:
return d[1]
else:
return "No Slots"
print("Finding locations . . .")
locations = browser.find_elements(By.CLASS_NAME,"ui-selectable")
for e, location in tqdm(enumerate(list(range(len(locations)))), total=len(locations)):
location = browser.find_elements(By.CLASS_NAME,"ui-selectable")[e]
# print(location.text)
_key = location.text
location.click()
location_date_map[_key] = check_location_date()
browser.back()
# %% [markdown]
# # Sort and Order Locations datewise
# %%
df = pd.DataFrame(location_date_map.items(), columns=["location", "date"])
df["datetime"] = pd.to_datetime(df['date'])
print(df.sort_values(['datetime']).head(10))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment