Как использовать Python-запрос для входа через страницу входа? - PullRequest
0 голосов
/ 31 мая 2019

Я смотрел другие примеры в Интернете, но не могу понять, как войти в систему. Страница выглядит примерно так:

<div class="Loginbox">
  <form id="login_form" name="login_form" method="post" action="/a/login.seam" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="login_form" value="login_form" />
    <div>
      <p><label for="login_form:name">
    Username</label><br /><input id="login_form:name" type="text" name="login_form:name"/>
      </p>
    </div>
    <div><label for="login_form:password">
  Password</label><br /><input id="login_form:password" type="password" name="login_form:password" value=""/>
    </div>
    <div><input id="login_form:submit" type="submit" name="login_form:submit" value="Login" class="buttonmed" />
    </div><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-13463453453453:3453445345345345345" autocomplete="off" />
  </form>
</div>

Я пробовал что-то вроде этого:

with requests.Session() as sess:
  data = {}
  data['login_form:name'] = user
  data['login_form:password'] = password
  sess.headers = HEADERS
  sess.get(url)
  sess.post(url, data=data)
  h = sess.get(url)
  print(h.text)

Но текст все равно показывает, что я на странице входа.

РЕШЕНИЕ :

import requests
from bs4 import BeautifulSoup


with requests.Session() as sess:
  data = {}
  data['login_form'] = 'login_form'
  data['login_form:name'] = user
  data['login_form:password'] = password
  sess.headers = HEADERS
  g = sess.get(url)
  soup = BeautifulSoup(g.text, "lxml")
  val = soup.select_one("input[id='javax.faces.ViewState']")['value']
  data['javax.faces.ViewState'] = val
  h = sess.post(url, data=data)
  print(h.text)

1 Ответ

1 голос
/ 31 мая 2019

Вы можете посмотреть в консоли браузера, какой запрос отправлен, когда нажмете кнопку входа на странице. Вам необходимо эмулировать этот запрос (URL и данные публикации).

...