Я пытаюсь войти на сайт с помощью Запросов и, кажется, наносит удар по стене. Любой совет будет принят во внимание.Вход в систему с использованием запросов Python
Я пытаюсь войти в систему economist.com (без причины, просто у меня есть имя пользователя и пароль), страница входа в систему которой находится в https://www.economist.com/user/login
и чья форма входа имеет атрибут action="https://www.economist.com/user/login?destination=%2F"
.
Использование инструментов разработчика Chrome, данные формы для запроса входа в систему выглядит следующим образом:
name: /////////
pass: ////////
form-build-id: form-483956e97a61f73fbc0ebf06b04dbe3f
form_id: user_login
securelogin_original_baseurl: https://www.economist.com
op: Log in
Мой код GETs страницу входа в систему, использует BeautifulSoup для определения form_id; попытки POST войти в систему с использованием моего имени пользователя и пароля, извлеченного form_id и других скрытых переменных; а затем использует BeautifulSoup проверить домашнюю страницу, чтобы увидеть, если баннер имеет ссылку для входа или выхода из системы, чтобы определить, есть ли я на самом деле вошли в
Код выглядит следующим образом:.
import requests
from bs4 import BeautifulSoup
# Setting user agent to a real browser instead of requests
headers = requests.utils.default_headers()
headers.update(
{
'User-Agent': 'Mozilla/5.0',
}
)
# create a session and login
s = requests.Session()
login_page = s.get('https://www.economist.com/user/login', headers=headers)
login = BeautifulSoup(login_page.text, 'lxml')
form = login.select_one("form > div > input")
payload = {
'name' : '////////////',
'pass' : '////////',
'form_build_id' : form['value'],
'form_id' : 'user_login',
'securelogin_original_baseurl' : 'https://www.economist.com',
'op' : 'Log in'
}
response = s.post("https://www.economist.com/user/login?destination=%2F",
data=payload, headers=headers)
# check homepage banner to see if login or logout link is there
url = "https://www.economist.com/"
r = s.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'lxml')
banner = soup.select("div > div > span > a")
for table_row in banner:
print(table_row['href'])
При запуске этого кода показывает, что баннер по-прежнему имеет ссылку для входа вместо ссылки выхода из системы, что, я полагаю, означает, что оно не вошло в систему. Я знаю, что я, должно быть, совершил очень простую ошибку здесь, но после прочтения других подобных вопросов здесь, Кажется, я не могу найти, где я иду. Я был бы признателен за любые советы по выполнению этой работы.
Спасибо. Это работает. Я думаю, что моя «форма» работала, хотя ваша гораздо менее прочная форма. Я думаю, что моя проблема все время была дрянной проверкой, чтобы увидеть, был ли я зарегистрирован. Ваш намного более изящный (хотя/активация перенаправляет меня на/thankyou, но предпосылка такая же). – argent656