Last active
October 13, 2023 01:21
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# %% [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