Created
December 16, 2019 01:41
-
-
Save luisliz/0d5f6f8f364505b8fc0a7bfd15709770 to your computer and use it in GitHub Desktop.
This file contains 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
import requests | |
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 | |
from selenium.common.exceptions import TimeoutException | |
from selenium.webdriver.chrome.options import Options | |
from datetime import datetime | |
from twilio.rest import Client | |
import time | |
#The login url you want | |
LOGINURL = "https://idp.upr.edu/module.php/core/loginuserpass.php?AuthState=_7690d1d677407e673e8835578bfbc083ef404cad91%3Ahttps%3A%2F%2Fidp.upr.edu%2Fsaml2%2Fidp%2FSSOService.php" | |
#Url you want to check for | |
REQUESTURL = 'https://online.upr.edu/grade/report/user/index.php?id=138331' | |
payload = { | |
'username': 'abc@email.edu', #Put email or username here. | |
'password': 'password123' #Put accoutn password here | |
} | |
changesFileName = "currentGrades.txt" | |
usernameElementName = "nameOfusernameField" | |
passwordElementName = "nameOfpasswordField" | |
gradesTableClass = "gradesTableClass" | |
logFile = "log.txt" | |
chrome_options = Options() | |
chrome_options.add_argument("--headless") | |
driver = webdriver.Chrome(chrome_options=chrome_options) #remove this option to show browser | |
def log(action): | |
f = open(logFile, "a") | |
current_time = datetime.now().strftime("%H:%M:%S") | |
log = current_time + " " + action | |
print(log) | |
f.write(log) | |
f.close() | |
#This requires a Twilio account | |
#Set TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN environment variables | |
def notifyGroup(change): | |
client = Client() | |
# this is the Twilio sandbox testing number | |
from_whatsapp_number='whatsapp:+14155238886' | |
# replace this number with your own WhatsApp Messaging number | |
to_whatsapp_number='whatsapp:+19993339922' | |
client.messages.create(body=change, from_=from_whatsapp_number, to=to_whatsapp_number) | |
def login(): | |
driver.get(LOGINURL) | |
driver.find_element_by_name(usernameElementName).send_keys(payload['username']) | |
driver.find_element_by_name(passwordElementName).send_keys(payload['password']) | |
driver.find_element_by_name(passwordElementName).submit() | |
URL = driver.current_url; | |
while not URL == REQUESTURL: | |
URL = driver.current_url; | |
if not URL == REQUESTURL and not URL == LOGINURL: | |
driver.get(REQUESTURL) | |
def scrape(): | |
login() | |
log("Logged In") | |
delay = 2 | |
try: | |
myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.CLASS_NAME, gradesTableClass))) | |
f = open(changesFileName, "r") | |
oldData = f.read() | |
f.close() | |
gradesElem = driver.find_element_by_class_name(gradesTableClass) | |
data = gradesElem.text | |
if not oldData == data: | |
log("Changed Changed!!") | |
notifyGroup(data) | |
else: | |
log("No Change...") | |
f = open(changesFileName, "w") | |
f.write(data) | |
f.close() | |
except TimeoutException: | |
print("Loading took too much time!") | |
while(True): | |
log("Starting Scraper") | |
scrape() | |
log("Waiting 5 Minutes") | |
time.sleep(300) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
if done with the right parameters it checks for grades and sends you a whatsapp message when grades are updated.