0 Вопрос: Войдите на сайт с именем пользователя и паролем в сеансе запросов

вопрос создан в Sat, Mar 16, 2019 12:00 AM

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

Мой код работает следующим образом:

import requests
from lxml import html
from bs4 import BeautifulSoup

USERNAME = "abe"
PASSWORD = input("password: ")
LOGIN_URL = <login_page_url>
URL = <page_available_after_logging_in>
AUTH_TOKEN_NAME = 'authenticity_token'

session_requests = requests.session()

# Get authenticity token
result = session_requests.get(LOGIN_URL)
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name=AUTH_TOKEN_NAME]/@value")))[0]

# Create payload
payload = {
    "name": USERNAME, 
    "user_pin": PASSWORD, 
    "authenticity_token": authenticity_token
}

# Perform login
result = session_requests.post(LOGIN_URL, data=payload, headers=dict(referer=LOGIN_URL))

# Check if logged in:
r2 = session_requests.get(URL)
soup = BeautifulSoup(r2.content, 'html.parser')
logged_in = soup.find_all('span', string='A string that exists if logged in')
if logged_in:
    print('logged in successfully')
else:
    print('login failed')

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

  1. Некоторые проблемы, связанные с файлами cookie. Я правильно переношу их, используя переменную session_requests, или я там допустил какую-то ошибку?

  2. Необходимо подождать, прежде чем пытаться получить доступ к следующей странице. Есть ли необходимость ждать между вызовом .post и получением доступа к другому номеру URL или это должно работать как есть? Я не знаю, сколько времени потребуется перезагрузить страницу.

    1. Токен аутентификации. Может ли быть проблема в получении этого токена? Мне кажется, я получаю тот код, который мне нужен, с этим кодом lxml, но, возможно, это также неверно.

Любая помощь или направление по этому вопросу было бы действительно здорово. Спасибо.

    
0
  1. Можете ли вы привести пример скручивания, который работает, или похожий? Я не могу понять, что вы должны делать, если вы не знаете или не предоставите URL для проверки. Обычно HTTP-аутентификация выполняется через заголовок аутентификации, а не через токен в теле.
    2019-03-16 19: 55: 08Z
  2. Что такое метод заголовка аутентификации?
    2019-03-16 20: 05: 02Z
  3. Используйте монитор, такой как Telerik Fiddler, чтобы шпионить за вашим браузером, когда вы открываете страницу входа, а затем входите в систему - затем a) используйте сеанс запросов, чтобы cookie обрабатывались автоматически, и б) повторить заголовки логина в вашем коде.
    2019-03-16 20: 30: 34Z
  4. Можете ли вы поделиться URL-адресом для входа?
    2019-03-17 06: 45: 45Z
  5. Это слишком специфично для используемого вами API, каждый выполняет аутентификацию немного по-разному, либо вы предоставляете ссылки на используемый вами API, и у вас есть длинный шанс на кто-то придумывает это для вас, или поймете это и зададите правильный вопрос об этом. Этот вопрос недопустим с моей точки зрения.
    2019-03-17 11: 46: 52Z
0 ответов                              0                         
источник размещен Вот