utilisation urllib2 login pass
bonjour je cherche à utiliser urlib2 pour utiliser un formulaire.
Par contre, la page n'est pas accessible de suite, il y a des redirection et session.
url de pointage : http://smsmms1.orange.fr/C/Sms/sms_write.php
ensuite on est redirigé vers une autre page où on doit saisir un login et password puis valider, si ok on est redirigé vers la page
http://smsmms1.orange.fr/C/Sms/sms_write.php?dub=2&
où il faut renseigner des champs.
voici le code actuel
Code:
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
|
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cookielib, urllib, urllib2
import os.path
import sys
COOKIEFILE = 'cookies.lwp' #### le chemin et fichier pour sauvegarder vos cookies
cj = None
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cookielib, urllib, urllib2
import os.path
import sys
COOKIEFILE = 'cookies.lwp'
cj = None
user_credential = 'XXXXXX'
urlopen = urllib2.urlopen
Request = urllib2.Request
cj = cookielib.LWPCookieJar()
if os.path.isfile(COOKIEFILE):
cj.load(COOKIEFILE)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
mon_url = 'http://smsmms1.orange.fr/C/Sms/sms_write.php'
values = {'user_credential':user_credential}
txdata = urllib.urlencode(values)
txheaders = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
try:
req = Request(mon_url, txdata, txheaders)
handle = urlopen(req)
# Ecriture :
f = open("orange.html", "w")
f.write(handle.read())
f.close()
# Lecture :
f = open("orange.html", "r")
var="Non la bonne page n'a pas été trouvée!"
for ligne in f:
mot_recherche=user_credential
if mot_recherche in ligne:
var="--- Oui la bonne page est affichée."
print var
print
f.close()
except IOError, e:
print '--- ERREUR'
sys.exit()
else:
print handle.headers
print '--- Voici les cookies:'
for index, cookie in enumerate(cj):
print index, ' : ', cookie
cj.save(COOKIEFILE) |
il faut encore ajouter la partie password
merci de votre aide
Toujours le problème final - mais plus clair
J'ai revu l'ensemble du code
pour tester il faut un compte orange.fr et remplacer mettre son num de tel et pass web
Code:
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
|
#!/usr/bin/python
# -*- coding: utf-8 -*-
import mechanize
import cookielib
# Browser
br = mechanize.Browser()
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# User-Agent (this is cheating, ok?)
br.addheaders = [('Referer', 'http://id.orange.fr/auth_user/template/auth0user/htm/vide.html'),
("Content-Type" , 'application/x-www-form-urlencoded') ]
br.open('http://id.orange.fr/auth_user/bin/auth_user.cgi?url=http://www.orange.fr')
#sauvegarde de la page cible
f = open("sms-1-form.html", "w")
f.write(br.response().read())
f.close()
# Show the response headers
print br.response().info()
# Show the available forms
for f in br.forms():
print f
# select the first (index zero) form
br.select_form(nr=0)
br.form.set_value('0600000000', name='credential')
br.form.set_value('votre_pass_ici', name='pwd')
br.form.set_value(0, name='save_pwd')
br.submit()
#passage à la page cible
#où il y a le formulaire qui sera saisi par la suite
br.follow_link(url_regex=r'smsmms')
#sauvegarde de la page cible
f = open("sms-2-cible.html", "w")
f.write(br.response().read())
f.close()
#affichage des formulaires de la page cible
for f in br.forms():
print f |
le programme se connecte et enregistre dans sms-1-form.html la page d'identification puis suis le lien pour sauvegarder dans sms-2-cible.html
mais la dernière boucle for génère l'erreur suivante alors que dans la première il n'y a pas de pb.
Dans le source du résultat on trouve bien un form name='formulaire' donc je ne comprends pas
voici l'erreur générée (le premier form correspond à celui de la première page et on devrait obtenir un truc similaire pour la seconde mais je ne vois pas
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<form1 POST http://id.orange.fr/auth_user/bin/authNuser.cgi?action=valider&date=1310559848&skey=9eccdabe56722e0db37efa5c981526e3&url=http://www.orange.fr application/x-www-form-urlencoded
<SubmitControl(valider=) (readonly)>
<TextControl(credential=)>
<HiddenControl(user_enroll_new=) (readonly)>
<PasswordControl(pwd=)>
<ImageControl(valider=)>
<CheckboxControl(save_pwd=[1])>>
Traceback (most recent call last):
File "./sms-orange.py", line 61, in <module>
for f in br.forms():
File "/usr/lib/python2.6/dist-packages/mechanize/_mechanize.py", line 426, in forms
return self._factory.forms()
File "/usr/lib/python2.6/dist-packages/mechanize/_html.py", line 559, in forms
self._forms_factory.forms())
File "/usr/lib/python2.6/dist-packages/mechanize/_html.py", line 228, in forms
raise ParseError(exc)
mechanize._html.ParseError |
au besoin je peux transmettre les deux fichiers générés