2014-05-13 19 views
9

ich auf dieser Webseite anmelden möchten: https://www.fitbit.com/login Dies ist mein Code verwende ich:Python: Anmelden einer Website mit urllib

import urllib2 
import urllib 
import cookielib 

login_url = 'https://www.fitbit.com/login' 
acc_pwd = {'login':'Log In','email':'username','password':'pwd'} 
cj = cookielib.CookieJar() ## add cookies 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
opener.addheaders = [('User-agent','Mozilla/5.0 \ 
        (compatible; MSIE 6.0; Windows NT 5.1)')] 
data = urllib.urlencode(acc_pwd) 
try: 
    opener.open(login_url,data,10) 
    print 'log in - success!' 
except: 
    print 'log in - times out!', login_url 

I Chrom verwenden das Element des Eingabefeldes zu untersuchen, habe ich versucht, viele Schlüsselpaare, aber keine funktioniert. Kann mir jemand helfen, einen Blick auf diese Website zu werfen? Was sind die korrekten Daten, die ich in meiner Variablen acc_pwd angegeben habe?

Vielen Dank

Antwort

7

Sie die verborgenen Felder des Formulars zu vergessen:

<form id="loginForm" class="validate-enabled failure form" method="post" action="https://www.fitbit.com/login" name="login"> 
    <input type="hidden" value="Log In" name="login"> 
    <input type="hidden" value="" name="includeWorkflow"> 
    <input id="loginRedirect" type="hidden" value="" name="redirect"> 
    <input id="disableThirdPartyLogin" type="hidden" value="false" name="disableThirdPartyLogin"> 
    <input class="field email" type="text" tabindex="23" name="email" placeholder="E-mail"> 
    <input class="field password" type="password" tabindex="24" name="password" placeholder="Mot de passe"> 
</form> 

so können Sie aktualisieren:

acc_pwd = {'login':'Log In', 
      'email':'username', 
      'password':'pwd', 
      'disableThirdPartyLogin':'false', 
      'loginRedirect':'', 
      'includeWorkflow':'', 
      'login':'Log In' 
      } 

, die von ihrer aufgegebenen bekommen könnten Bedienung. Obwohl ich den Namen des Feldes disableThirdPartyLogin habe, frage ich mich, ob es kein schmutziges Javascript gibt, das an die Sendeaktion des Formulars gebunden ist, die tatsächlich einen Wert hinzufügt, bevor der POST tatsächlich ausgeführt wird. Möglicherweise möchten Sie dies mit den analysierten Entwicklerwerkzeugen und POST-Werten überprüfen.

Testing, der es nicht sieht, wenn die Javascript einige Werte addiert, die von Cookies sein kann:

__fp w686jv_O1ZZztQ7FkK21Ry2MI7JbqWTf 
_sourcePage tJvTQfA5dkvGrJMFkFsv6XbX0f6OV1Ndj1zeGcz7OKzA3gkNXMXGnj27D-H9WXS- 
disableThirdPartyLogin false 
email [email protected] 
includeWorkflow 
login Log In 
password aeou 
redirect  

hier ist mein nehmen dies mit Anfragen zu tun (was eine bessere API als urllib hat ;-))

und vergessen Sie nicht, zuerst auf die Login-Seite mit einem bekommen, um Ihre Cookies jar in füllen!

Endlich kann ich Ihnen nicht weiter helfen, da ich kein gültiges Konto bei fitbit.com habe und ich keins brauche/will. So kann ich nur auf die Login-Fehler-Seite für meine Tests gelangen.

edit:

die Ausgabe zu analysieren, dann können Sie verwenden:

>>> from lxml import etree 
>>> p = etree.HTML(r.text) 

zum Beispiel die Fehlermeldungen zu erhalten:

>>> p.xpath('//ul[@class="errorList"]/li/text()') 
['Lutilisateur nexiste pas ou le mot de passe est incorrect.'] 

Ressourcen:

und sie beide auf pypi:

pip install lxml requests 

HTH

+0

Vielen Dank! Aber für den nächsten, wie kann ich r nutzen? Ich habe die Anforderungsbibliothek noch nie zuvor verwendet. – MacSanhe

+0

können Sie 'r.status_code' verwenden, um den Statuscode zu erhalten,' r.cookies', um den Cookie-Jar zu erhalten (oder Sie können 'jar' verwenden), Sie können' r.text' verwenden und an 'lxml' übergeben oder 'BeautifulSoup', um Ihnen beim Parsen der resultierenden Seite zu helfen. Schau dir http://python-requests.org an, um dich davon zu überzeugen, wie toll diese Bibliothek ist :-) – zmo

+0

Ich meine, was ich normalerweise mache ist: 1. opener.open (login_url, data) 2. regulär urllib2.urlopen .request (balabalabala) Also, wenn ich eine Anfrage zum Login verwende, bedeutet das, dass ich eine Anfrage verwenden muss, um HTML aus der URL herauszuholen? Ich habe meinen regulären zweiten Schritt versucht, es funktioniert nicht. – MacSanhe