139 lines
4.5 KiB
Python
139 lines
4.5 KiB
Python
try:
|
|
from selenium import webdriver
|
|
except ImportError:
|
|
import os
|
|
os.system('pip install selenium')
|
|
from selenium import webdriver
|
|
from time import sleep
|
|
timetable = '/html/body/blockquote/table/tbody/tr[#]/td[*]/input'
|
|
|
|
# /html/body/blockquote/table/tbody/tr[3]/td[2]/input
|
|
# /html/body/blockquote/table/tbody/tr[3]/td[3]/input
|
|
# /html/body/blockquote/table/tbody/tr[4]/td[2]/input
|
|
# /html/body/blockquote/table/tbody/tr[17]/td[2]/input
|
|
|
|
|
|
def chooseTime():
|
|
print('\n Choose a time:')
|
|
print('7AM-8AM 1')
|
|
print('8AM-9AM 2')
|
|
print('9AM-10AM 3')
|
|
print('10AM-11AM 4')
|
|
print('11AM-12PM 5')
|
|
print('12PM-1PM 6')
|
|
print('1PM-2PM 7')
|
|
print('2PM-3PM 8')
|
|
print('3PM-4PM 9')
|
|
print('4PM-5PM 10')
|
|
print('5PM-6PM 11')
|
|
print('6PM-7PM 12')
|
|
print('7PM-8PM 13')
|
|
print('8PM-9PM 14')
|
|
print('9PM-10PM 15')
|
|
while True:
|
|
choiceTime = input('\nYour choice: ')
|
|
if choiceTime in ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15']:
|
|
return int(choiceTime)+2
|
|
else:
|
|
print("\nInvalid choice.")
|
|
continue
|
|
|
|
|
|
def chooseDay(x):
|
|
slots = []
|
|
for i in range(x):
|
|
while True:
|
|
print('\n Choose a day:')
|
|
print('Sunday 1')
|
|
print('Monday 2')
|
|
print('Tuesday 3')
|
|
print('Wednesday 4')
|
|
print('Thursday 5')
|
|
print('Friday 6')
|
|
print('Saturday 7')
|
|
choiceDay = input('\nYour choice: ')
|
|
if choiceDay in ['1', '2', '3', '4', '5', '6', '7']:
|
|
if choiceDay == '1':
|
|
period = timetable.replace(
|
|
'#', str(chooseTime())).replace('*', '8')
|
|
if period in slots:
|
|
print("\nDuplicate slots found.")
|
|
continue
|
|
else:
|
|
slots.append(period)
|
|
break
|
|
else:
|
|
period = timetable.replace(
|
|
'#', str(chooseTime())).replace('*', choiceDay)
|
|
if period in slots:
|
|
print("\nDuplicate slots found.")
|
|
continue
|
|
else:
|
|
slots.append(period)
|
|
break
|
|
else:
|
|
print("\nInvalid choice.")
|
|
continue
|
|
return slots
|
|
|
|
|
|
def Booking():
|
|
|
|
weeks = int(input('Number of weeks to book: '))
|
|
days = int(input('Number of slots in a week to book: '))
|
|
final = chooseDay(days)
|
|
|
|
user = str(input('Username: '))
|
|
password = str(input('Password: '))
|
|
while True:
|
|
ok = str(input('Ready. Do you want to book? (y/n): '))
|
|
if ok == 'y':
|
|
break
|
|
elif ok == 'n':
|
|
print('\nAborted.')
|
|
return
|
|
else:
|
|
print("\nInvalid choice.")
|
|
continue
|
|
browser = webdriver.Edge()
|
|
browser.get("http://extranet.oppilastalo.fi/")
|
|
browser.find_element_by_xpath(
|
|
'/html/body/div/form/table/tbody/tr[3]/td[2]/input').send_keys(user)
|
|
browser.find_element_by_xpath(
|
|
'/html/body/div/form/table/tbody/tr[4]/td[2]/input').send_keys(password)
|
|
browser.find_element_by_xpath(
|
|
'/html/body/div/form/table/tbody/tr[5]/td[1]/input').click()
|
|
sleep(3)
|
|
try:
|
|
browser.find_element_by_xpath('/html/body/center/div[1]')
|
|
except Exception:
|
|
pass
|
|
else:
|
|
print("\nIncorrect password.")
|
|
return
|
|
week = 0
|
|
while week <= weeks:
|
|
for i in range(len(final)):
|
|
browser.find_element_by_xpath('/html/body/code/a[4]').click()
|
|
sleep(3)
|
|
while True:
|
|
try:
|
|
browser.find_element_by_xpath(final[i]).click()
|
|
browser.find_element_by_xpath(
|
|
'/html/body/blockquote/submenu/blockquote/input[1]').click()
|
|
break
|
|
except:
|
|
try:
|
|
browser.find_element_by_xpath(
|
|
'/html/body/blockquote/table/tbody/tr[1]/td[7]/input').click()
|
|
sleep(5)
|
|
except:
|
|
browser.close()
|
|
return
|
|
week += 1
|
|
browser.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
Booking()
|