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 ) :
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
Bon ... Déjà, deux problèmes :
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 :
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">&nbsp;</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>&nbsp;</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>&nbsp;</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>
2) Lors de l’exécution du programme python, une erreur apparaît pour la commande "rpost = s.post(url, data=payload)" :
Citation Envoyé par Python 3.4.3 Shell
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 544, in urlopen
body=body, headers=headers)
File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 341, in _make_request
self._validate_conn(conn)
File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 761, in _validate_conn
conn.connect()
File "C:\Python34\lib\site-packages\requests\packages\urllib3\connection.py", line 238, in connect
ssl_version=resolved_ssl_version)
File "C:\Python34\lib\site-packages\requests\packages\urllib3\util\ssl_.py", line 279, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "C:\Python34\lib\ssl.py", line 365, in wrap_socket
_context=self)
File "C:\Python34\lib\ssl.py", line 583, in __init__
self.do_handshake()
File "C:\Python34\lib\ssl.py", line 810, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python34\lib\site-packages\requests\adapters.py", line 370, in send
timeout=timeout
File "C:\Python34\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 574, in urlopen
raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:/Users/Florentin/Desktop/TestCrous.py", line 10, in <module>
rpost = s.post(url, data=payload) #Poste dans l'url indiqué les informations fournis dans 'payload' et rempli ce qu'il faut.
File "C:\Python34\lib\site-packages\requests\sessions.py", line 508, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "C:\Python34\lib\site-packages\requests\sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "C:\Python34\lib\site-packages\requests\sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "C:\Python34\lib\site-packages\requests\adapters.py", line 431, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)

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.