Как "войти" на сайт с помощью модуля запросов 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-е изд:
Я хочу иметь возможность оставаться в системе в течение длительного времени, и всякий раз, когда я запрашиваю страницу под этим доменом, я хочу, чтобы контент отображался, как если бы я вошел в систему.
4 ответов:
Если нужной вам информации на этой странице вам сразу же после регистрации...
давайте назовем ваш
ckпеременнаяpayloadвместо этого, как в python-запросы docs:payload = {'inUserName': 'USERNAME/EMAIL', 'inUserPass': 'PASSWORD'} url = 'http://www.locationary.com/home/index2.jsp' requests.post(url, data=payload)В противном случае...
Я знаю, что вы нашли другое решение, но для таких, как я, которые находят этот вопрос, ища то же самое, это может быть достигнуто с помощью запросов следующим образом:
во - первых, как и Маркус, проверьте источник формы входа, чтобы получить три части информации-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.pyln -s ~/home/scipts/login.py ~/home/scipts/loginзакройте терминал, запустите новый, запустите
login
Comments