Created
March 31, 2021 15:01
-
-
Save jimmyjxiao/3b7ff1a4a6010157f4e7d5dd15e76115 to your computer and use it in GitHub Desktop.
This script automatically reserves Wilson weightlifting slots.
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
# This script automatically reserves Wilson weightlifting slots. | |
# usage: python GymScheduler.py --day=monday --startTime=9:20AM | |
# use cron (unix) or TaskScheduler (windows) to get this to run automatically 48 hours before | |
# you need selenium webdriver for chrome and selenium python bindings installed. | |
from selenium import webdriver | |
from selenium.webdriver.support.ui import WebDriverWait | |
from selenium.webdriver.support import expected_conditions as EC | |
from selenium.webdriver.common.by import By | |
import sys, getopt | |
import datetime | |
import os | |
netId = "replaceWithNetId"; | |
password = "replaceWithPassword"; | |
day = ""; | |
timeStr = ""; | |
for opt, arg in getopt.getopt(sys.argv[1:],'', ['day=', 'startTime='])[0]: | |
if opt == '--day': | |
day = arg; | |
elif opt == '--startTime': | |
timeStr = arg; | |
time = datetime.datetime.strptime(timeStr, "%I:%M%p"); | |
assert day in ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]; | |
url = ""; | |
if(day == "friday"): | |
url = "https://myrec.recreation.duke.edu/Program/GetProgramDetails?courseId=07f09bf6-a9c9-412c-b829-21527ae9115b&semesterId=b5eb2dd5-ffd9-458e-946d-230f7857a3c3"; | |
elif(day == "saturday"): | |
url = "https://myrec.recreation.duke.edu/Program/GetProgramDetails?courseId=f0f24306-8ce5-477c-8811-4375143e1236&semesterId=b5eb2dd5-ffd9-458e-946d-230f7857a3c3"; | |
else: | |
if time < datetime.datetime(1900, 1, 1, 10, 0): # block A | |
url = "https://myrec.recreation.duke.edu/Program/GetProgramDetails?courseId=394e79ad-b8cc-4766-b624-0a915ffd21f7&semesterId=b5eb2dd5-ffd9-458e-946d-230f7857a3c3"; | |
elif time < datetime.datetime(1900, 1, 1, 13, 0): # block B | |
url = "https://myrec.recreation.duke.edu/Program/GetProgramDetails?courseId=2e5bb146-2047-408c-841f-f38d5048e86c&semesterId=b5eb2dd5-ffd9-458e-946d-230f7857a3c3"; | |
else: # block C | |
url = "https://myrec.recreation.duke.edu/Program/GetProgramDetails?courseId=91e8d35c-4c8b-4375-87b7-32b335246157&semesterId=b5eb2dd5-ffd9-458e-946d-230f7857a3c3"; | |
browser = webdriver.Chrome(); | |
browser.get(url); | |
browser.find_element_by_id("loginLink").click(); | |
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.ID, "expand-netid"))).click(); | |
WebDriverWait(browser, 10).until(EC.visibility_of(browser.find_element_by_id("j_username"))).send_keys(netId); | |
browser.find_element_by_id("j_password").send_keys(password); | |
browser.find_element_by_id("Submit").click(); | |
strftimeFormatStr = ""; | |
if os.name == 'nt': | |
strftimeFormatStr = "%#I:%M %p - "; | |
else: | |
strftimeFormatStr = "%-I:%M %p - "; | |
xpath = "//label[contains(text(), '%s')]/..//SMALL[contains(text(), '%s')]/../..//button[text()='Register']" % (day.capitalize(), time.strftime(strftimeFormatStr)); | |
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.ID, "gdpr-cookie-accept"))).click(); | |
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, xpath))).click(); | |
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".container-fluid > .btn-primary"))).click(); | |
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.ID, "checkoutButton"))).click(); | |
WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".modal-footer > .btn-primary"))).click(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment