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



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



from pyquery import PyQuery
import requests

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


Так что теперь, я думаю, что я должен использовать "пост" и куки....



ck = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'}

r = requests.post(url, cookies=ck)

content = r.text

q = PyQuery(content)

title = q("title").text()

print title


у меня такое чувство, что я делаю печенье вещь неправильно...Я не знаю.



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



Если бы вы могли объяснить мне несколько вещей о запросах и печенье и помочь мне с этим, я был бы очень признателен. : 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-е изд:



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

395   4  

4 ответов:

Если нужной вам информации на этой странице вам сразу же после регистрации...

давайте назовем ваш ck переменная payload вместо этого, как в python-запросы docs:

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

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

см.https://stackoverflow.com/a/17633072/111362 ниже.

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

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

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

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

позвольте мне попытаться сделать его простым, предположим, что 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', Теперь запустите a простой скрипт на python

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

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

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

узнайте имя входных данных, используемых в форме веб-сайтов для имен пользователей <...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 scipt внутри home/scripts/login.py

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

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

Comments

    Ничего не найдено.