Ich versuche, eine Anfrage zum Anmelden auf einer Website mit dem Modul "Anfragen" in Python zu veröffentlichen, aber es funktioniert nicht wirklich. Ich bin neu in diesem Bereich ... daher kann ich nicht herausfinden, ob ich meine Benutzernamen- und Kennwort-Cookies oder eine von mir gefundene HTTP-Autorisierungssache (??) erstellen soll.
from pyquery import PyQuery
import requests
url = 'http://www.locationary.com/home/index2.jsp'
Jetzt denke ich, ich sollte "Post" und Cookies verwenden ...
ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
r = requests.post(url, cookies=ck)
content = r.text
q = PyQuery(content)
title = q("title").text()
print title
Ich habe das Gefühl, dass ich die Kekse falsch mache ... ich weiß es nicht.
Wenn es sich nicht richtig anmeldet, sollte der Titel der Homepage auf "Locationary.com" erscheinen, und wenn dies der Fall ist, sollte es "Homepage" sein.
Wenn Sie mir vielleicht ein paar Dinge über Anfragen und Cookies erklären und mir dabei helfen könnten, wäre ich Ihnen sehr dankbar. : D.
Vielen Dank.
... Es hat immer noch nicht wirklich funktioniert. Okay ... das sagt der HTML-Code der Startseite, bevor Sie sich anmelden:
</td><td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_email.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="text" name="inUserName" id="inUserName" size="25"></td>
<td><img src="http://www.locationary.com/img/LocationaryImgs/icons/txt_password.gif"> </td>
<td><input class="Data_Entry_Field_Login" type="password" name="inUserPass" id="inUserPass"></td>
Ich denke, ich mache es richtig, aber die Ausgabe ist immer noch "Locationary.com".
2. EDIT:
Ich möchte in der Lage sein, lange angemeldet zu bleiben, und wenn ich eine Seite unter dieser Domain anfordere, möchte ich, dass der Inhalt so angezeigt wird, als wäre ich angemeldet.
quelle
Ich weiß, dass Sie eine andere Lösung gefunden haben, aber für diejenigen wie mich, die diese Frage finden und dasselbe suchen, kann dies mit folgenden Anfragen erreicht werden:
Überprüfen Sie zunächst wie Marcus die Quelle des Anmeldeformulars, um drei Informationen zu erhalten - die URL, an die das Formular gesendet wird, und die Namensattribute der Felder Benutzername und Kennwort. In seinem Beispiel sind dies inUserName und inUserPass.
Sobald Sie das haben, können Sie eine
requests.Session()
Instanz verwenden, um eine Post-Anfrage an die Login-URL mit Ihren Login-Daten als Nutzdaten zu senden. Das Erstellen von Anforderungen aus einer Sitzungsinstanz entspricht im Wesentlichen der normalen Verwendung von Anforderungen. Es erhöht lediglich die Persistenz und ermöglicht das Speichern und Verwenden von Cookies usw.Angenommen, Ihr Anmeldeversuch war erfolgreich, können Sie einfach die Sitzungsinstanz verwenden, um weitere Anforderungen an die Site zu stellen. Das Cookie, das Sie identifiziert, wird zum Autorisieren der Anforderungen verwendet.
Beispiel
quelle
p = s.post('LOGIN_URL.....
und dannp.text
Lassen Sie mich versuchen, es einfach zu machen. Angenommen, die URL der Website lautet http://example.com/. Angenommen, Sie müssen sich anmelden, indem Sie Benutzername und Passwort eingeben. Gehen Sie also zur Anmeldeseite und sagen Sie http: // Beispiel. com / login.php jetzt und sehen Sie sich den Quellcode an und suchen Sie nach der Aktions-URL, die in Form eines Tags vorliegen soll
Nehmen Sie jetzt userinfo.php, um eine absolute URL zu erstellen, die " http://example.com/userinfo.php " lautet. Führen Sie nun ein einfaches Python-Skript aus
Ich hoffe, dass dies irgendwann jemandem irgendwo hilft.
quelle
webbrowser
Modul verwendenprint r.content
ist falsch, das er verwenden sollteprint(r.content)
Finden Sie den Namen der Eingaben heraus, die auf dem Website-Formular für Benutzernamen
<...name=username.../>
und Kennwörter verwendet werden,<...name=password../>
und ersetzen Sie sie im folgenden Skript. Ersetzen Sie auch die URL, um auf die gewünschte Site zu verweisen, bei der Sie sich anmelden möchten.login.py
Durch die Verwendung von
disable_warnings(InsecureRequestWarning)
werden alle Ausgaben des Skripts stummgeschaltet, wenn versucht wird, sich bei Sites mit nicht verifizierten SSL-Zertifikaten anzumelden.Extra:
Um dieses Skript über die Befehlszeile auf einem UNIX-basierten System auszuführen, legen Sie es in einem Verzeichnis ab, dh
home/scripts
fügen Sie dieses Verzeichnis Ihrem Pfad in~/.bash_profile
oder einer ähnlichen Datei hinzu, die vom Terminal verwendet wird.Erstellen Sie dann einen Link zu diesem Python-Skript
home/scripts/login.py
Schließen Sie Ihr Terminal, starten Sie ein neues und führen Sie es aus
login
quelle
Die
requests.Session()
Lösung unterstützte die Anmeldung in einem Formular mit CSRF-Schutz (wie in Flask-WTF-Formularen verwendet). Überprüfen Sie, ob acsrf_token
als verstecktes Feld erforderlich ist, und fügen Sie es mit dem Benutzernamen und dem Kennwort zur Nutzlast hinzu:quelle