Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
N
Notobot
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Wiki
Wiki externe
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Extraits de code
Compilation
Pipelines
Jobs
Planifications de pipeline
Artéfacts
Déploiement
Releases
Registre de paquets
Registre de conteneur
Registre de modèles
Opération
Environnements
Modules Terraform
Surveillance
Incidents
Analyse
Données d'analyse des chaînes de valeur
Analyse des contributeurs
Données d'analyse CI/CD
Données d'analyse du dépôt
Expériences du modèle
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
Adrien NUNES
Notobot
Validations
a617c1ab
Valider
a617c1ab
rédigé
4 years ago
par
Adrien NUNES
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
initial
parent
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Modifications
1
Masquer les modifications d'espaces
En ligne
Côte à côte
Affichage de
1 fichier modifié
main.py
+183
-0
183 ajouts, 0 suppression
main.py
avec
183 ajouts
et
0 suppression
main.py
0 → 100644
+
183
−
0
Voir le fichier @
a617c1ab
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
Ce diff est replié.
Cliquez pour l'agrandir.
Aperçu
0%
Chargement en cours
Veuillez réessayer
ou
joindre un nouveau fichier
.
Annuler
You are about to add
0
people
to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Enregistrer le commentaire
Annuler
Veuillez vous
inscrire
ou vous
se connecter
pour commenter