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

Python c moins bien

parent 5745d4f4
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
#Remplire ici
# (ou bien ils seront demandés avant l'execution)
webhook = None #Sous forme "https://discord.com/api/webhooks/???/???"
username = None
password = None
#############
if(not username):
username = input("Enter your username: ")
if(not password):
password = input("Enter your password: ")
if(not webhook):
webhook = input("Enter your Discord webhook (https://discord.com/api/webhooks/???/???)\n: ")
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': 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( code not in notes_dones ):
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