Próbuję wysłać prośbę o zalogowanie się do witryny internetowej za pomocą modułu Requests w Pythonie, ale tak naprawdę nie działa. Jestem nowy w tym ... więc nie mogę dowiedzieć się, czy powinienem utworzyć pliki cookie dotyczące nazwy użytkownika i hasła lub jakiś rodzaj autoryzacji HTTP, który znalazłem (??).
from pyquery import PyQuery
import requests
url = 'http://www.locationary.com/home/index2.jsp'
Więc teraz myślę, że powinienem używać „post” i plików cookie…
ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
r = requests.post(url, cookies=ck)
content = r.text
q = PyQuery(content)
title = q("title").text()
print title
Mam wrażenie, że robię ciasteczka źle ... Nie wiem.
Jeśli nie loguje się poprawnie, tytuł strony głównej powinien wskazywać „Locationary.com”, a jeśli tak, powinien to być „Strona główna”.
Gdybyś mógł wyjaśnić mi kilka rzeczy na temat próśb i plików cookie i pomóc mi w tym, byłbym bardzo wdzięczny. :RE
Dzięki.
… To nadal nie działa. OK ... więc tak mówi kod HTML strony głównej przed zalogowaniem:
</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>
Myślę więc, że robię to dobrze, ale wynik nadal to „Locationary.com”
2. EDYCJA:
Chcę być zalogowany przez długi czas, a za każdym razem, gdy żądam strony w tej domenie, chcę, aby zawartość wyświetlała się tak, jakbym był zalogowany.
źródło
Wiem, że znalazłeś inne rozwiązanie, ale dla takich jak ja, którzy znajdują to pytanie i szukają tego samego, można to osiągnąć za pomocą następujących żądań:
Po pierwsze, podobnie jak Marcus, sprawdź źródło formularza logowania, aby uzyskać trzy informacje - adres URL, na który formularz wysyła, oraz atrybuty nazwy w polach nazwy użytkownika i hasła. W jego przykładzie są to inUserName i inUserPass.
Gdy już to zrobisz, możesz użyć
requests.Session()
instancji, aby wysłać żądanie wpisu do adresu URL logowania z danymi logowania jako ładunkiem. Wykonywanie żądań z instancji sesji jest zasadniczo takie samo, jak normalne korzystanie z żądań, po prostu dodaje trwałości, umożliwiając przechowywanie i używanie plików cookie itp.Zakładając, że próba logowania się powiodła, możesz po prostu użyć instancji sesji, aby wysłać dalsze żądania do witryny. Plik cookie, który Cię identyfikuje, będzie używany do autoryzacji żądań.
Przykład
źródło
p = s.post('LOGIN_URL.....
a potemp.text
Spróbuję to uprościć, załóżmy, że adres URL witryny to http://example.com/ i załóżmy, że musisz zarejestrować się, wypełniając nazwę użytkownika i hasło, więc przechodzimy do strony logowania, mówiąc http: // przykład. com / login.php teraz i wyświetl jego kod źródłowy i wyszukaj adres URL akcji, który będzie w formie tagu podobnego do
teraz weź userinfo.php, aby utworzyć bezwzględny adres URL, który będzie „ http://example.com/userinfo.php ”, teraz uruchom prosty skrypt Pythona
Mam nadzieję, że to kiedyś komuś pomoże.
źródło
webbrowser
modułuprint r.content
jest złe, którego powinien używaćprint(r.content)
Znajdź nazwy danych wejściowych używanych w formularzu witryn internetowych dla nazw użytkowników
<...name=username.../>
i haseł<...name=password../>
i zamień je w poniższym skrypcie. Zastąp także adres URL, aby wskazywał żądaną witrynę, do której chcesz się zalogować.login.py
Użycie
disable_warnings(InsecureRequestWarning)
spowoduje wyciszenie wszelkich danych wyjściowych skryptu podczas próby zalogowania się do witryn z niezweryfikowanymi certyfikatami SSL.Dodatkowy:
Aby uruchomić ten skrypt z wiersza poleceń w systemie opartym na systemie UNIX, umieść go w katalogu, tj.
home/scripts
Dodaj ten katalog do swojej ścieżki w~/.bash_profile
lub podobnego pliku używanego przez terminal.Następnie utwórz link do tego skryptu Pythona w środku
home/scripts/login.py
Zamknij terminal, uruchom nowy, biegnij
login
źródło
requests.Session()
Roztwór wspomagany rejestrowanie w postaci o ochronie CSRF (które są stosowane w postaci skrzynkowego WTF). Sprawdź, czy polecsrf_token
jest wymagane jako ukryte i dodaj je do ładunku za pomocą nazwy użytkownika i hasła:źródło