Bonjour !
Voilà mon problème :
Comme vous l'aurez sans doute vu dans le titre, étant étudiant nous avons un accès WiFi mais je cherche à créer un programme permettant de me connecter automatiquement à un portail captif (du Crous), malgré que nous ne soyons qu'en début d'année, ce système de portail est déjà assez embêtant, embêtant à devoir sans cesse se reconnecter (identifiant et mot de passe, même si généralement ceux ci sont stockés dans les cookies) puis à devoir cocher "Accepter" la charte RENATER et enfin le bouton "Continue" pour valider le tout et être connecté. Quelques uns d'entre vous se dirons que ce ne sont pas des manipulations faramineuse à réaliser manuellement mais je peux vous affirmer que le faire environ 4-5fois par jour, ça devient un peu trop répétitif ^^
J'ai donc fait quelques recherches (Non, je ne suis pas venu les mains dans les poches réclamer une réponse ) malheureusement, vous vous en douterez, le résultat n'est pas concluant.
J'ai trouvé un morceau de code d'une personne voulant, à mon goût, réaliser des opérations plus ou moins similaire, j'ai donc essayé de re-bidouiller ce code à ma sauce pour répondre au besoin décrit précédemment.
Voici où j'en suis (avec les commentaires de ce que j'ai cru comprendre, d'ailleurs, à toutes bonnes personnes qui viendront à mon aide, si je ne vous en demande pas trop, j'aimerai que vous fassiez de même, afin de comprendre le code ) :
Bon ... Déjà, deux problèmes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 import requests import re url = "https://portail-captif.crous.unicaen.fr:8003" payload = {"auth_user":"LOGIN","auth_pass":"MDP","iagree":"1"} #Permet de remplir les champs indiqués (Login,MotdePasse,Case à cocher) s = requests.Session() #Recupère les cookies pour compléter automatique les identifiant et mot de passe si possible rpost = s.post(url, data=payload) #Poste dans l'url indiqué les informations fournis dans 'payload' et rempli ce qu'il faut
1) Personnellement, je vois bien que les champs d'identification seront a priori rempli, ainsi que le bouton radio "Accepter" mais quant à la phase final de devoir actionner le bouton "Continue" permettant la connexion, je ne vois pas où l'action se réaliserait dans ce bout de code ^^"
Au passage, voici le code source de la page portail en question :
2) Lors de l’exécution du programme python, une erreur apparaît pour la commande "rpost = s.post(url, data=payload)" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
142
143 <html><head> <meta content="text/html; charset=windows-1252" http-equiv="content-type"> <style type="text/css"> body { background-color: #fff; } body,td,th { color: #090; } </style> </head> <body> <form method="post" action="https://portail-captif.crous.unicaen.fr:8003/" onsubmit="return CheckBoxesValidations() ;"> <input name="redirurl" value="/" type="hidden"> <center> <div style="text-align: center; height: 203px;"><left> <img src="captiveportal-logo.jpg" alt="logo" height="200px" width="200px"> </left></div> <table style="border:1px solid #000000" cellpadding="6" cellspacing="0" height="380" width="550"> <tbody> <tr bgcolor="#990000" height="10"> <td style="border-bottom:1px solid #000000" bgcolor="#4a97cd"> <font color="white"> <center><b> Portail Réseau Internet Etudiant </b></center> </font> </td> </tr> <tr> <td> <div id="mainlevel"> <center> <table border="0" cellpadding="5" cellspacing="0" width="100%"> <tbody> <tr> <td> <center> <div id="mainarea"> <center> <table border="0" cellpadding="5" cellspacing="5" width="100%"> <tbody> <tr> <td> <div id="maindivarea"> <center> <div id="statusbox"> <font color="red" face="arial" size="+1"> <b> </b> </font> </div> <br> <div id="loginbox"> <table> <tbody> <tr> <td colspan="2"> <center><span style="color: #4a97cd;">Bienvenue sur le Portail Captif du CROUS de CAEN</span></center> </td> </tr> <tr> <td colspan="2"> <br> </td> </tr> <tr> <td> </td> </tr> <tr> <td align="right"><span style="color: black;">Utilisateur:</span></td> <td align="left"><input name="auth_user" style="border: 1px dashed;" type="text"></td> </tr> <tr> <td align="right"><span style="color: black;">Mot de Passe:</span></td> <td align="left"><input name="auth_pass" style="border: 1px dashed;" type="password"></td> </tr> <tr> <td> </td> </tr> <tr> <td><br> </td> <td><br> </td> </tr> <tr> <td><br> </td> <td> <br> </td> </tr> <tr> <td><br> </td> <td><br> </td> </tr> <tr> <td><br> </td> <td> <p align="center"><textarea id="aup" name="aup" rows="5" cols="50"> En vous connectant sur le réseau, vous devez accepter la charte RENATER </textarea> </p> </td> </tr> </tbody> </table> <input id="iagree" name="CHKBOX1" value="0" type="checkbox"><span style="color: black;">Accepter</span> <input name="accept" value="Continue" type="submit"> </div> </center> </div> </td> </tr> </tbody> </table> </center> </div> </center> </td> </tr> </tbody> </table> </center> </div> </td> </tr> </tbody> </table> </center> </form> <script type="text/javascript"> function CheckBoxesValidations() { if(document.getElementById('iagree').checked == false) { alert("Vous devez accepter la charte pour vous connecter"); return false; } else return true; } </script> </body></html>
Envoyé par Python 3.4.3 Shell
Quelques informations supplémentaires :
- Je n'avais encore jamais travaillé avec cette bibliothèque auparavant, sans doute je n'y comprend pas tout
- Mon niveau informatique pour Python est bon pour un tas de choses basiques mais je dois sans doute rester dans les débutants
- Version de Python utilisée : 3.4.3
- Version de Requests : 2.7.0
- Système d'exploitation : Windows 8.1
Sur ce, merci de votre aide future, si vous avez besoin de plus d'informations sur certains points, n'hésitez pas à me le demander.
Partager