Подтвердить что ты не робот

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

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

from pyquery import PyQuery
import requests

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

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

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

Спасибо.

... Это все еще не работает. Хорошо... так вот что говорит 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"

2nd EDIT:

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

4b9b3361

Ответ 1

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

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

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

Иначе...

Смотрите fooobar.com/questions/110214/... ниже.

Ответ 2

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

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

Как только вы получите это, вы можете использовать экземпляр requests.Session(), чтобы сделать запрос на отправку URL-адреса входа, в котором ваши данные для входа будут полезны. Выполнение запросов из экземпляра сеанса по существу совпадает с обычными запросами, оно просто добавляет постоянство, позволяя хранить и использовать файлы 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 a successful login page.
    print p.text

    # An authorised request.
    r = s.get('A protected web page url')
    print r.text
        # etc...

Ответ 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 script

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

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

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

Ответ 4

Узнайте названия входов, используемых в форме веб-сайтов для имен пользователей <...name=username.../> и паролей <...name=password../>, и замените их в приведенном ниже сценарии. Также замените URL-адрес, чтобы он указывал на нужный сайт для входа.

login.py

#!/usr/bin/env python

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
payload = { 'username': '[email protected]', 'password': 'blahblahsecretpassw0rd' }
url = 'https://website.com/login.html'
requests.post(url, data=payload, verify=False)

Использование disable_warnings(InsecureRequestWarning) отключит любой вывод скрипта при попытке входа на сайты с непроверенными сертификатами SSL.

Дополнительно:

Чтобы запустить этот сценарий из командной строки в системе на основе UNIX, поместите его в каталог, т.е. home/scripts, и добавьте этот каталог в свой путь в ~/.bash_profile или аналогичном файле, используемом терминалом.

# Custom scripts
export CUSTOM_SCRIPTS=home/scripts
export PATH=$CUSTOM_SCRIPTS:$PATH

Затем создайте ссылку на этот скрипт Python внутри home/scripts/login.py

ln -s ~/home/scripts/login.py ~/home/scripts/login

Закройте свой терминал, запустите новый, запустите login

Ответ 5

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

import requests
from bs4 import BeautifulSoup

payload = {
    'email': '[email protected]',
    '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)