This repository has been archived by the owner on Dec 23, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspecs.py
141 lines (104 loc) · 4.67 KB
/
specs.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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import logging
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.wait import WebDriverWait
import common
from setup import CWL, PASSWORD, EMAIL_LIST, EMAIL_SEND_DELAY, CHECK_INTERVAL, SEND_DATA
TARGET_URL = "https://courses.students.ubc.ca/cs/courseschedule?pname=regi&tname=regi"
def specs_check():
common.setup()
found = 0
while found == 0:
driver = common.webdriver_config(True)
try:
driver.get(TARGET_URL)
WebDriverWait(driver, timeout=15).until(
ec.element_to_be_clickable((By.CSS_SELECTOR, "#cwl > form")))
login_button = driver.find_element(by=By.CSS_SELECTOR, value="#cwl > form")
login_button.click()
common.login(driver, CWL, PASSWORD)
# Reset driver context
driver.switch_to.default_content()
try:
time.sleep(2)
search = driver.find_element(by=By.NAME, value="selSpec")
search.click()
search = driver.find_element(
by=By.CLASS_NAME, value="program-spec-name")
spec = search.text
spec = spec[3:]
found = 1
logging.info("Specializations released!")
send_email(spec)
except:
logging.info("No specializations yet")
time.sleep(2)
except Exception as e:
logging.exception("Error Checking Specializations:")
driver.save_screenshot("ssc_error_" + time.strftime("%Y-%m-%d_%H-%M-%S") + ".png")
driver.quit()
if found == 0:
time.sleep(CHECK_INTERVAL)
return
def send_email(spec):
sent_email = 0
while sent_email == 0:
driver = common.webdriver_config(False)
try:
driver.get("https://webmail.student.ubc.ca/")
common.login(driver, CWL + "@student.ubc.ca", PASSWORD)
WebDriverWait(driver, timeout=15).until(ec.element_to_be_clickable(
(By.XPATH, "//*[@title = 'Write a new message (N)']")))
search = driver.find_element(
by=By.XPATH, value="//*[@title = 'Write a new message (N)']")
search.click()
WebDriverWait(driver, timeout=15).until(
ec.element_to_be_clickable((By.XPATH, "//*[@title = 'Send']")))
search = driver.find_element(
by=By.XPATH, value="//*[@aria-label = 'To']")
for email in EMAIL_LIST:
search.send_keys(email)
search.send_keys(Keys.TAB)
WebDriverWait(driver, timeout=15).until(
ec.element_to_be_clickable((By.XPATH, "//*[@aria-label = 'Subject,']")))
search = driver.find_element(
by=By.XPATH, value="//*[@aria-label = 'Subject,']")
search.click()
search.send_keys("Specializations Release")
WebDriverWait(driver, timeout=15).until(
ec.element_to_be_clickable((By.XPATH, "//*[@aria-label = 'Message body']")))
search = driver.find_element(
by=By.XPATH, value="//*[@aria-label = 'Message body']")
search.clear()
search.send_keys("Hello,\n")
search.send_keys(Keys.ENTER)
search.send_keys(
"Second year Engineering Specializations have been released!\n")
search.send_keys(Keys.ENTER)
if SEND_DATA:
search.send_keys("Specialization found: " + spec + "\n")
search.send_keys(Keys.ENTER)
search.send_keys(
"Specializations are available at https://courses.students.ubc.ca/cs/courseschedule?pname=regi&tname"
"=regi\n")
search.send_keys(Keys.ENTER)
italic = driver.find_element(
by=By.XPATH, value="//*[@aria-label = 'Italics']")
italic.click()
search.send_keys("This is an automated email")
WebDriverWait(driver, timeout=15).until(
ec.element_to_be_clickable((By.XPATH, "//*[@title = 'Send']")))
search = driver.find_element(
by=By.XPATH, value="//*[@title = 'Send']")
search.click()
sent_email = 1
time.sleep(EMAIL_SEND_DELAY)
logging.info("Email sent!")
except Exception as e:
logging.exception("Error sending email:")
driver.save_screenshot("email_error_" + time.strftime("%Y-%m-%d_%H-%M-%S") + ".png")
return
if __name__ == "__main__":
specs_check()