2015-12-12 3 views
1

Я ударился головой о стену ... может ли кто-нибудь помочь мне обернуть мой мозг вокруг получения запроса на работу?Запросы на Python - путаница POST

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

Вот то, что я до сих пор

import requests 
login_url = 'https://example.com/examplelogin 
login_payload = {'j_username':'myusername', 'j_password':'mypassword'} 
with requests.Session() as s: 
    r = s.post(login_url, data = login_payload) 

Вот форма я пытаюсь заполнить:

<form id="login" action="/idp/Authn/UserPassword" method="post"> 
<p class="customError"></p> 
<section> 
<input id="username" class="form-element form-field" name="j_username" type="text" value="" placeholder="email address"></section> 
<section> 
<input id="password" class="form-element form-field" name="j_password" type="password" value="" placeholder="password"></section> 
<button class="form-element form-button" type="submit">Login</button> 
</form> 

для r.status_code я получаю 200 но r.text это только Войти страницу HTML. .. Это меня не вводит и не приводит ...

Что мне не хватает?

ответ

1

Если у сайта нет какого-либо API-интерфейса, возможно, вы не сможете использовать запросы lib для доступа к нему. Вы должны посмотреть на Selenium, что позволит вам использовать FireFox для доступа к странице. Если вам нужна версия без головы, которая часто намного быстрее, вы можете использовать phantomjs.

from selenium.webdriver.firefox.webdriver import WebDriver 


driver = WebDriver() 
driver.get('https://example.com/examplelogin') 

username = driver.find_element_by_id('username') 
password = driver.find_element_by_id('password') 

username.send_keys('MY_USERNAME') 
password.send_keys('MY_PASSWORD') 

submit.click() 
+0

Сайт не имеет API, доступного пользователю (инструкторы в учреждении). У меня есть версия сценария Selenium, но когда наступает время для выполнения работы (размещение оценок и комментариев от excel на сайте), она чрезвычайно медленная (2-3 мин для 25 классов). Я надеюсь найти более быстрое решение этого, и мне было предложено напрямую обратиться к формам. Может быть, есть другие решения, о которых я не знаю ...? –

+0

Вы должны взглянуть на http://phantomjs.org/, это ускорит процесс, и вам не понадобится перестраивать ваши скрипты.Также возможно, что с запросами это будет невозможно. Я столкнулся с тем же вопросом пару месяцев назад, пытаясь автоматизировать некоторые задачи на работе. –

+0

Первоначальное тестирование с использованием phantomjs представляется многообещающим. Я не смогу сделать «настоящий» тест до следующей недели ... но пока это работает быстрее. Это привело к появлению нескольких ошибок, требующих 'time.sleep()', чтобы все работало ... но я достаточно доволен этим, и я продвигаюсь дальше. Спасибо за помощь. –

1

Запросы - это HTTP-библиотека. Вы должны прочитать о HTTP, для чего это необходимо.

HTTP функционирует как протокол запроса-ответа в вычислительной модели клиент-сервер. Например, веб-браузер может быть клиентом, а приложение, работающее на компьютере с веб-сайтом, может быть сервером. Клиент отправляет на сервер сообщение с запросом HTTP. Сервер, который предоставляет такие ресурсы, как HTML-файлы и другой контент, или выполняет другие функции от имени клиента, возвращает ответное сообщение клиенту. Ответ содержит информацию о статусе завершения запроса и может также содержать запрошенный контент в его теле сообщения.

Фактически ваша форма должна делать то же, что и запрос POST. Вы также должны прочитать о forms.

Я думаю, будет хорошей идеей заполнить учебник, чтобы понять, как он работает. There is a good place to start.

+0

Благодарим вас за отзыв. Я дам этим прочитать ... У моего HTTP-знания определенно не хватает. –

+0

Ссылка на формы была особенно интересной. Еще раз спасибо! –

0

Вы хотите отправить запрос на /IDP/AuthN/UserPassword вместо /examplelogin. Если у формы есть атрибут действия, браузер отправит POST на указанный адрес в этом атрибуте.

Но все же, если вы хотите работать с сайтом, лучше использовать Selenium в качестве @ emett-speer, потому что вы, вероятно, не хотите говорить с сайтом вручную (что, если URL будет изменен и т. Д.).

+0

Когда я пытаюсь отправить сообщение на **/idp/Authn/UserPassword **, я получаю статус «404 Not Found» в ответ. Я запускаю еще несколько тестов, но, вероятно, перейду к тестированию phantomjs, чтобы ускорить реализацию Selenium, вместо того, чтобы перетаскивать «запросы» теперь, когда ... Спасибо за отзывы. –

+0

Вы можете посмотреть, как браузер создает запрос при отправке данных форм. Просто нажмите F12 на целевой странице, перейдите на вкладку «Сеть» и нажмите «Войти» в форме (убедитесь, что вы включили постоянную регистрацию, если браузер очищает список запросов на вкладке). – Cybran

Смежные вопросы