Использование Post и запросов на вход в систему для очистки данных с помощью Python - PullRequest
0 голосов
/ 30 октября 2019

Я бухгалтер, пытающийся расширить свой кругозор;Я довольно новичок в Python и хотел автоматизировать вход на сайт и извлекать данные, которые не могут быть загружены. Мне нужна помощь с логином. Я не уверен, правильны ли мои словарные ключи для полезной нагрузки, потому что я честен с богом ужасным с html. Я также не думаю, что веб-сайт проверяет наличие ботов и нуждается в заголовке, но я могу ошибаться. Вот мой код:

payload = {'login:username': '*****','login:password': '*********','login:j_id28': 'Login'}
with requests.Session() as s:
    url = 'https://fms.flexepos.com/FlexeposWeb/login.seam'
    r = s.post(url, data=payload)
    s = s.get('the website I want to get the data from')
    print(s.text)```

#Thanks geese

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

Вы должны удалить javax.faces.ViewState со страницы входа в систему и добавить его в свою полезную нагрузку. Добавьте заголовки в свой сеанс.

import requests
import bs4 as bs

# Create session.
session = requests.Session()

headers = {
    'Host': 'fms.flexepos.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Origin': 'https://fms.flexepos.com',
    'Referer': 'https://fms.flexepos.com/FlexeposWeb/login.seam',
}

# Add headers in session.
session.headers.update(headers)

# Login page request.
login_page_url = 'https://fms.flexepos.com/FlexeposWeb/login.seam'
response = session.get(login_page_url)

soup = bs.BeautifulSoup(response.text, 'lxml')

# Extract javax.faces.ViewState, login:j_id28, login from login page.
token = soup.find('input', {'id': 'javax.faces.ViewState'}).get('value')
j_id28 = soup.find('input', {'name': 'login:j_id28'}).get('value')
login = soup.find('input', {'name': 'login'}).get('value')

jsessionid = response.cookies.get('JSESSIONID')

# Add javax.faces.ViewState, login:j_id28, login in payload.
payload = {
    'login': login,
    'login:username': 'YOUR USERNAME',
    'login:password': 'YOUR PASSWORD',
    'login:j_id28': j_id28,
    'javax.faces.ViewState': token
}

# Request for login.
login_url = 'https://fms.flexepos.com/FlexeposWeb/login.seam;jsessionid={0}'.format(jsessionid)
login_response = session.post(login_url, data=payload, headers=headers)

response = session.get('the website I want to get the data from')
print(response.text)
0 голосов
/ 30 октября 2019

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

payload = {
    'login': 'username',
    'password': '*********',
}
with requests.Session() as s:
    url = 'https://fms.flexepos.com/FlexeposWeb/login.seam'
    r = s.post(url, data=payload)
    s = s.get('the website I want to get the data from')
    print(s.text)

# Thanks geese

Но если у вас все еще будут проблемы с этим, вы можете использовать этот инструмент . Это позволяет конвертировать cURL в рабочий код Python. Единственное, что вам нужно для этого сделать - открыть Инструменты разработчика в вашем браузере, войти в систему и скопировать туда свой запрос. Инструмент автоматически преобразует этот запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...