Skip to content
Extraits de code Groupes Projets
Valider a617c1ab rédigé par Adrien NUNES's avatar Adrien NUNES
Parcourir les fichiers

initial

parent
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
import time
import sys
import requests
from bs4 import BeautifulSoup
webhook = "https://discord.com/api/webhooks/???/???"
id_discord = '???'
username = '???'
password = '???'
url_cas = "https://cas.ensiie.fr/login"
url_notes = "https://aurionweb.ensiie.fr/faces/LearnerNotationListPage.xhtml"
url_aurion = "https://aurionweb.ensiie.fr/faces/MainMenuPage.xhtml"
session = None
notes_dones = []
def new_session():
global session
session = requests.session()
class AurionSession:
def __init__(self):
form_id = None
form_res_id = None
form_sub_res_id = None
viewState = None
# Recupere le champs <input> 'execution' de la page de connexion
def get_execution():
field = 'name="execution" value="'
r = session.get(url_cas, verify=False)
start = r.text.index(field) + len(field)
end = r.text.index('"', start + 1)
return r.text[start:end]
# Login sur le cas
def login(execution):
data = {
'username': username,
'password': password,
'execution': execution,
'_eventId': 'submit',
'geolocation': ''
}
session.post(url_cas, data=data)
#Parse une page pour update le nouvau 'viewState'
def parse_view_state(rep, aurion_session):
soup = BeautifulSoup(rep, 'html.parser')
element = soup.find('update', {'id':'j_id1:javax.faces.ViewState:0'})
if(element != None):
aurion_session.viewState = element.string
else:
aurion_session.viewState = soup.find('input', {'id': 'j_id1:javax.faces.ViewState:0'})['value']
#Parse une page et recupere l'id du menu
def parse_menu_id(text, aurion_session):
field = '{PrimeFaces.ab({s:"'
soup = BeautifulSoup(text, 'html.parser')
for script in soup.find_all('script'):
content = script.string
if(content != None and "chargerSousMenu" in content):
start = content.find(field)
if(start > 0):
start += len(field)
end = content.find('"', start)
aurion_session.form_id = content[start:end]
return
#Parse une page et recupere l'id du menu 'Résultats'
def parse_menu_res(text, aurion_session):
soup = BeautifulSoup(text, 'html.parser')
for span in soup.findAll('span', {'class' : 'ui-menuitem-text'}):
if(span.string == "Résultats"):
for classMenu in span.parent.parent['class']:
if(classMenu.startswith('submenu_')):
aurion_session.form_res_id = classMenu
return
return
#Parse une page et recupere l'id du sous-menu 'Notes aux épreuves année en cours'
def parse_submenu_res(text, aurion_session):
field = "form:sidebar_menuid':'"
content = BeautifulSoup(text, 'html.parser')
for sub_menu in content.findAll('span', {'class' : 'ui-menuitem-text'}):
if(sub_menu.string == 'Notes aux épreuves année en cours'):
m = sub_menu.parent['onclick']
start = m.index(field) + len(field)
end = m.index("'", start)
aurion_session.form_sub_res_id = m[start:end]
return
#Demande les sous-menu du menu 'Résultats'
def init_result(aurion_session):
data = {
'javax.faces.partial.ajax': 'true',
'javax.faces.source': aurion_session.form_id,
'javax.faces.partial.execute': aurion_session.form_id,
'javax.faces.partial.render': 'form:sidebar',
aurion_session.form_id: aurion_session.form_id,
'webscolaapp.Sidebar.ID_SUBMENU': aurion_session.form_res_id,
'form': 'form',
'javax.faces.ViewState': aurion_session.viewState
}
r = session.post(url_aurion, data=data)
soup = BeautifulSoup(r.text, 'html.parser')
parse_submenu_res(soup.find('update').string, aurion_session)
parse_view_state(r.text, aurion_session)
#Envoi une alert Discord
def send_alert(note):
print(note)
data = {
'content': '<@'+id_discord+'> : '+note,
'username': 'Notobot',
}
requests.post(webhook, json=data)
#Parse les notes
def process_note(note_element):
fields = note_element.findAll('td')
code = fields[1].string
title = fields[2].string
note = fields[3].string
if('12' in code) and ( code not in notes_dones ): # '12' in code -> notes du S2
notes_dones.append(code)
send_alert(title+' -> '+note)
time.sleep(1)
#Demande les notes
def get_result(aurion_session):
data = {
'form': 'form',
'form:sidebar': 'form:sidebar',
'form:sidebar_menuid': aurion_session.form_sub_res_id,
'javax.faces.ViewState': aurion_session.viewState
}
r = session.post(url_aurion, data=data)
soup = BeautifulSoup(r.text, 'html.parser')
for line in soup.find('tbody').findAll('tr'):
process_note(line)
def init_main():
aurion_session = AurionSession()
r = session.get(url_aurion)
parse_menu_id(r.text, aurion_session)
parse_menu_res(r.text, aurion_session)
parse_view_state(r.text, aurion_session)
init_result(aurion_session)
get_result(aurion_session)
if __name__ == '__main__':
while True:
try:
new_session()
execution = get_execution()
login(execution)
init_main()
except:
print("Error_ ", sys.exc_info()[0])
time.sleep(600)
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter