-
Notifications
You must be signed in to change notification settings - Fork 0
/
group_signup.py
119 lines (106 loc) · 4.74 KB
/
group_signup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import requests
import pause
import keyring
import logging
import json
import threading
import time
import datetime
logging.basicConfig(level=logging.INFO)
user_agent = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38'}
session = requests.Session()
session.headers.update(user_agent)
def login(session, user, password):
logging.info("Logging in...")
while True:
try:
init = session.get('https://is.muni.cz/auth/', allow_redirects=True)
login_post = session.post(init.url, data={"akce":"login", "credential_0":user, "credential_1":password, "uloz":"uloz"}, allow_redirects=True, timeout = 10)
break
except ConnectionError:
logging.info("Connection error, trying again in 3 seconds")
time.sleep(3)
if login_post.url == 'https://is.muni.cz/auth/':
return session, 0
else:
return session, 1
def group_signup(group_link, group_num, session):
logging.info(f"GRP-{group_num}: Starting signup")
logging.info(f"GRP-{group_num}: Group link - {group_link}")
pause.until(unix_timestamp)
while True:
try:
init = session.get(group_link, allow_redirects=True, timeout = 10)
if init.status_code == 200:
if "Přihlášení nelze provést" in init.text:
logging.info(f"GRP-{group_num}: Group is already full")
else:
logging.info(f"GRP-{group_num}: Successfully signed up")
break
except TimeoutError as e:
logging.info(f"GRP-{group_num}: Timed out, retrying...")
except ConnectionError as e:
logging.info(f"GRP-{group_num}: Connection error, retrying...")
except Exception as e:
logging.info(f"GRP-{group_num}: Unknown error, retrying...")
def group_signup_repeat(group_link, group_num, session, sleep_time):
logging.info(f"GRP-{group_num}: Starting signup")
logging.info(f"GRP-{group_num}: Group link - {group_link}")
while True:
try:
init = session.get(group_link, allow_redirects=True, timeout = 10)
time.sleep(sleep_time)
if init.status_code == 200:
if "Přihlášení nelze provést" not in init.text:
logging.info(f"GRP-{group_num}: Successfully signed up")
break
else:
logging.info(f"GRP-{group_num}: Non-200 status code - {init.status_code}")
logging.info(f"GRP-{group_num}: Retrying...")
except Exception as e:
logging.info(f"GRP-{group_num}: Unknown error, retrying...")
time.sleep(sleep_time)
while True:
user = input("Enter your IS MUNI uco: ")
password = input("Enter your IS MUNI password: ")
session, return_code = login(session, user, password)
if return_code == 0:
logging.info("Login successful")
break
elif return_code == 1:
logging.error("Login failed, invalid credentials, try inputting them again")
groups = []
while True:
choice = input("1. Enter a new group link\n2. Exit group adding and choose a mode\nChoice (1 or 2): ")
if choice == '1':
group_link = input("Please enter the group link: ")
groups.append(group_link)
logging.info("Group successfully added")
elif choice == '2':
choice2 = input("1. Signup at a given time\n2. Repeatedly try to signup for the chosen groups (full)\nChoice (1 or 2): ")
if choice2 == '1':
wait_until = input("Enter the time (HH-MM-SS-DD-MM-YYYY), when the signup happens: ")
hour = int(wait_until.split('-')[0])
minute = int(wait_until.split('-')[1])
second = int(wait_until.split('-')[2])
day = int(wait_until.split('-')[3])
month = int(wait_until.split('-')[4])
year = int(wait_until.split('-')[5])
date_time = datetime.datetime(year, month, day, hour, minute, second)
unix_timestamp = time.mktime(date_time.timetuple())
group_num = 1
for grp in groups:
threading.Thread(target = group_signup, args=(grp,group_num,session,)).start()
time.sleep(1)
group_num += 1
break
elif choice == '2':
sleep_time = int(input("Enter your sleep time (in seconds, recommended (60 / (4 - number of groups)): ") or "60")
group_num = 1
for grp in groups:
threading.Thread(target = group_signup_repeat, args=(grp,group_num,session,sleep_time,)).start()
time.sleep(1)
group_num += 1
break
else:
logging.info("Invalid choice")