Вопрос-Ответ

How to "log in" to a website using Python's Requests module?

Как "войти" на веб-сайт с помощью модуля запросов Python?

Я пытаюсь отправить запрос на вход на веб-сайт с помощью модуля запросов на Python, но на самом деле это не работает. Я новичок в этом деле. this...so Я не могу понять, должен ли я создавать файлы cookie для своего имени пользователя и пароля или какой-то тип авторизации HTTP, который я нашел (??).

from pyquery import PyQuery
import requests

url = 'http://www.locationary.com/home/index2.jsp'

Итак, теперь, я думаю, я должен использовать "post" и файлы 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

У меня такое чувство, что я неправильно использую файлы cookie...Я не знаю.

Если он не входит в систему правильно, заголовок домашней страницы должен быть "Locationary.com", и если это так, это должно быть "Домашняя страница".

Если бы вы могли объяснить мне несколько вещей о запросах и файлах cookie и помочь мне с этим, я был бы очень признателен. :D

Спасибо.

... На самом деле это все еще не сработало. Okay...so это то, что написано на домашней странице HTML перед входом в систему:

</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>

Итак, я думаю, что я делаю это правильно, но вывод по-прежнему "Locationary.com"

2-я ПРАВКА:

Я хочу иметь возможность оставаться в системе в течение длительного времени, и всякий раз, когда я запрашиваю страницу в этом домене, я хочу, чтобы содержимое отображалось так, как если бы я входил в систему.

Переведено автоматически
Ответ 1

Я знаю, что вы нашли другое решение, но для таких, как я, которые задают этот вопрос, ища то же самое, это может быть достигнуто с помощью запросов следующим образом:

Во-первых, как это сделал Маркус, проверьте источник формы входа, чтобы получить три фрагмента информации - URL, на который отправляется форма, и атрибуты name полей имени пользователя и пароля. В его примере это inUserName и inUserPass.

Получив это, вы можете использовать requests.Session() экземпляр, чтобы отправить post-запрос на URL-адрес для входа с вашими регистрационными данными в качестве полезной нагрузки. Выполнение запросов из экземпляра сеанса по сути такое же, как обычное использование запросов, это просто добавляет постоянства, позволяя вам хранить и использовать файлы cookie и т.д.

Предполагая, что ваша попытка входа в систему была успешной, вы можете просто использовать экземпляр сеанса для отправки дальнейших запросов на сайт. Файл cookie, который идентифицирует вас, будет использоваться для авторизации запросов.

Пример

import requests

# Fill in your details here to be posted to the login form.
payload = {
'inUserName': 'username',
'inUserPass': 'password'
}

# Use 'with' to ensure the session context is closed after use.
with requests.Session() as s:
p = s.post('LOGIN_URL', data=payload)
# print the HTML returned or something more intelligent to see if it's a successful login page.
print(p.text)

# An authorised request.
r = s.get('A protected web page URL')
print(r.text)
# etc...
Ответ 2

Если нужная вам информация находится на странице, на которую вы попадаете сразу после входа в систему...

Давайте вместо этого вызовем вашу ck переменную payload, как в документации по python-requests:

payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}
url = 'http://www.locationary.com/home/index2.jsp'
requests.post(url, data=payload)

В противном случае...

Смотрите https://pythonly.ru/a/17633072/111362 ниже.

Ответ 3

Позвольте мне попытаться упростить, предположим, URL сайта http://example.com / и давайте предположим, что вам нужно зарегистрироваться, введя имя пользователя и пароль, поэтому мы переходим на страницу входа, скажем http://example.com/login.php теперь просмотрите его исходный код и найдите URL-адрес действия, он будет в теге формы что-то вроде

 <form name="loginform" method="post" action="userinfo.php">

теперь возьмем userinfo.php чтобы создать абсолютный URL, который будет 'http://example.com/userinfo.php', теперь запустите простой скрипт на python

import requests
url = 'http://example.com/userinfo.php'
values = {'username': 'user',
'password': 'pass'}

r = requests.post(url, data=values)
print r.content

Я надеюсь, что это когда-нибудь кому-нибудь поможет.

Ответ 4

Решение requests.Session() помогло войти в форму с защитой CSRF (как используется в формах Flask-WTF). Проверьте, требуется ли csrf_token в качестве скрытого поля, и добавьте его в полезную нагрузку вместе с именем пользователя и паролем:

import requests
from bs4 import BeautifulSoup

payload = {
'email': 'email@example.com',
'password': 'passw0rd'
}

with requests.Session() as sess:
res = sess.get(server_name + '/signin')
signin = BeautifulSoup(res._content, 'html.parser')
payload['csrf_token'] = signin.find('input', id='csrf_token')['value']
res = sess.post(server_name + '/auth/login', data=payload)
python python-requests