2017-05-30 2 views
0

Ich versuche, ein kleines Stück Software zu schreiben, die sich in mintos.com anmeldet, und speichert die Kontoübersichtsseite (die nach einer erfolgreichen Anmeldung angezeigt wird) in einer HTML-Datei. Ich habe verschiedene Ansätze ausprobiert, und dies ist meine aktuelle Version.Mintos.com Login mit Python-Anfragen

import requests 
import sys 
import codecs 

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) 

username = 'abc' 
password = '123' 

loginUrl = 'https://www.mintos.com/en/login' 

resp = requests.get(loginUrl, auth=(username, password)) 
file = codecs.open("mint.html", "w", "UTF-8") 
file.write(resp.text) 
file.close() 

Wenn ich den Code ausführen, ich spare nur die Originalseite, nicht die, die ich soll, wenn in protokolliert werden. Ich glaube, ich bin durcheinander die Login (ich meine ... es sonst nicht viel zu vermasseln). Ich habe schon eine peinliche Zeit mit diesem Problem verbracht.

Edit: Ich habe auch versucht, etwas entlang der Linien von:

import requests 
import sys 
import codecs 

sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) 

loginUrl = "https://www.mintos.com/en/login"; 
username = "abc" 
password = "123" 
payload = {"username": username, "password": password} 


with requests.session() as s: 
    resp = s.post(loginUrl, data = payload) 
    file = codecs.open("mint.html", "w", "UTF-8") 
    file.write(resp.text) 
    file.close() 

Edit 2: Eine andere nicht funktionierende Version, diesmal mit _csrf_token

with requests.session() as s: 
    resp = s.get(loginUrl) 
    toFind = '_csrf_token" value="' 
    splited = resp.text.split(toFind)[1] 
    _csrf_token = splited.split('"',1)[0] 
    payload = {"_username": _username, "_password": _password, "_csrf_token": _csrf_token} 

    final = s.post(loginUrl, data = payload) 
    file = codecs.open("mint.html", "w", "UTF-8") 
    file.write(final.text) 
    file.close() 

Aber ich immer noch das gleiche Ergebnis. Die heruntergeladene Seite hat das gleiche Token wie das, das ich extrahiere.

Final Edit: Ich habe es funktioniert, und ich fühle mich jetzt dumm. Ich brauchte „‚https://www.mintos.com/en/login/check‘wie meine loginUrl zu verwenden.

Antwort

1

Der auth Parameter ist nur eine Abkürzung für HTTPBasicAuth, das ist nicht das, was die meisten Websites verwenden. Die meisten von ihnen verwenden Cookies oder Session-Daten, um Ihre Login/Infos zu speichern Auf Ihrem Computer können Sie überprüfen, wer Sie sind, während Sie die Seiten durchsuchen

Wenn Sie sich auf der Website anmelden möchten, müssen Sie eine POST-Anfrage auf dem Anmeldeformular und dann Speichern Sie (und geben Sie jedes Mal) die Cookies zurück, die sie an Sie senden. Das bedeutet auch, dass sie keinen "Anti-Bot-Filter" haben (was dazu führt, dass Sie sich nicht einloggen können, ohne einen echten Browser zu haben) am wenigsten, nicht so leicht).

+0

Habe das nicht über Auth, gut zu wissen. Ich habe versucht, alredy etwas entlang der Linien von dieser: import fordert import sys Import Codecs sys.stdout = codecs.getwriter ("utf-8") (sys.stdout.detach()) loginUrl = " https://www.mintos.com/de/login "; username = "abc" password = "123" Payload = { "username": Benutzername, "Passwort": Passwort} mit requests.session() als s: \t resp = s.post (loginUrl, data = Nutzlast) \t file = codecs.open ("mint.html", "w", "UTF-8") \t file.write (resp.text) \t file.close(), aber das hat nicht arbeite entweder. – Daniel

+0

Ich habe mein OP aktualisiert, um eine Version mit POST hinzuzufügen, die ich ausprobiert habe. – Daniel

+0

Das kann nicht funktionieren. Nimm es nicht als Vorwurf, aber weißt du, wie HTML-Formulare funktionieren? Die auf mintos.com hat die Felder '_username' und' _password' und Sie geben ihnen Werte für 'Benutzername' und' Passwort' ... –