2016-06-14 25 views
1

Ich lese mehrere ähnliche Thema .. Ich versuche, die anderen Beispiele zu folgen, aber ich bin immer noch in der Mitte von Nirgendwo .. Ich habe grundlegende Fähigkeiten der Python-Programmierung und wenig Wissen über http Protokoll, meine beiden Ziele sind: -succesfull Authentifizierung auf einer Website über Anfragen Bibliothek -fetch Daten von der Website nach dem Login, während die Sitzung aktiv istPython Authentifizierung mit Anfragen Bibliothek über POST

Dies ist der Code:

import requests 

targetws = 'https://secure.advfn.com/login/secure' 

s = requests.session() 

payload_data = {'login_username': 'xxx', 'login_password': 'yyy'} 

response = s.post(targetws, data=payload_data) 


url='https://it.advfn.com/mercati/BIT/generali-G/ordini' 

result = s.get(url) 

print result.content 

Aber ich bekomme immer keinen Erfolg mit Login. Vielleicht vermisse ich etwas Wert in Post-Daten wie Aktion einreichen oder sonst? Jede Hilfe wird geschätzt, mit freundlichen Grüßen!

Hier wird der HTML-Code der Seite:

form action="https://secure.advfn.com/login/secure" id="login_form" name="login_form" method="POST" target=""> 

     <input type="hidden" value="aHR0cDovL2l0LmFkdmZuLmNvbQ==" name="redirect_url" id="redirect_url"> 
     <input type="hidden" value="it" name="site" id="site"> 

     <div class="fields"><label for="login_username">Username</label> 
      <input type="text" tabindex="1" class="text ui-widget-content" value ="" 
      id="login_username" name="login_username" maxlength="64"> 
     </div> 

     <div class="fields"><label for="login_password">Password</label> 
      <input tabindex="2" type="password" class="text ui-widget-content" value="" id="login_password" name="login_password" maxlength="16"> 
     </div> 
       <div class="fields"> 
        <strong><a href="/common/account/password/request">Se ti sei dimenticato la tua password</a></strong> &nbsp; 
        <input class="button" tabindex="3" type="submit" value="Accedi" id="login_submit"> 
       </div> 
    </form 
+0

Was ist die Antwort erhalten Sie zurück, wenn der Login-Versuch fehlschlägt? Überprüfen Sie die Attribute 'status_code' und' text'. –

+0

Danke für Ihre Antwort, Statuscode immer 200 und Text: 200 Traceback (jüngste Aufforderung zuletzt): File "deepbook.py", Zeile 21, in Druck result.text UnicodeEncodeError: 'ascii' Codec kann nicht codiere das Zeichen u '\ xe0' an Position 909: Ordinalwert nicht im Bereich (128) – egariM

+0

Dein Verbindungstyp erwartet den Header von form-url-codiert und du sendest das json-Objekt. data = 'username =' + user + '& password =' ​​+ passwort header = { "Inhaltstyp": "application/x-www-form-urlencoded; Zeichensatz = UTF-8" } – DevD

Antwort

1

Wenn man sieht, was geschrieben wird:

enter image description here

Sie sehen benötigen Sie bitte den redirect_url und site, die Sie von der parsen Eingabe in der Quelle mit bs4:

import requests 
from bs4 import BeautifulSoup 

data = {"redirect_url": "", 
     "site": "uk", 
     "login_username": "foo", 
     "login_password": "bar"} 

with requests.Session() as s: 
    log = "https://secure.advfn.com/login/secure" 
    r = s.get("http://uk.advfn.com/") 
    soup = BeautifulSoup(r.content) 
    redirect_url = soup.select_one("#redirect_url")["value"] 
    site = soup.select_one("#site")["value"] 
    data["redirect_url"] = redirect_url 
    p = s.post(log, data=data) 
    print(p.content) 
    print(s.get('https://it.advfn.com/mercati/BIT/generali-G/ordini').content) 

Sobald Sie dies tun, werden Sie erfolgreich angemeldet.

+0

Der Code, den Sie schreiben, funktioniert! Vielen Dank für diese Hilfe! Nur ein paar Fragen, um meinen Fehler zu verstehen. 1. Wenn ich den s.post() benutze, werden die Daten über den Header gesendet? 2. Sie sagten, dass ich, wenn ich https://secure.advfn.com/login/secure anrufe, zu http://uk.advfn.com/ weitergeleitet wurde, aber wie kommt man auf diese Seite? Es ist codiert base64 in redirect_url? Soll ich diese Variable (redirect_url) in der Antwortnachricht jedes Mal überprüfen, um sicher zu sein? Vielen Dank für Ihre Hilfe! – egariM

+0

4. Welche Art von Software verwenden Sie, um die Header abzufangen? Ursache mit "Live http Header" Erweiterung für Chrome Ich denke, dass Daten über Cookies nach dem ersten Login gesendet werden .. Danke! – egariM

+0

INo prob, wenn Sie den Quellcode betrachten, können Sie sehen, unter Eingabe-Tags die redirect_url und Website, es ist nur eine Frage der Parsing die Werte von den Tags, um zu bekommen, was Sie zu posten müssen. Wenn Sie Chrome-Entwickler-Tools oder Firebug öffnen, können Sie genau sehen, was unter dem Netzwerk-Tab passiert. –