Отправить POST запрос с данные формы (
С помощью Chrome -> F12 -> Networks узнал что посылает POST запрос на сервер.
Сайт генерит код "user-registration-login-nonce". При попытке войти на сайт, используя requests, не могу войти. Если же вхожу в браузер, добываю собственно код вручную , и шлю его в теле (data) POST запоса, то все работает.
Вопрос: Можно ли как то получить этот код без браузера? Или сымитировать браузер через python3 (от количества header-ов ничего не меняется, проверил), чтобы сайт выдал этот код. Может можно как то добыть код, используя requests.Session(), но тогда объясните как.
Вот собственно то, что посылает POST:
username:
password:
user-registration-login-nonce: 951eaa1c33 # <- нужный код
_wp_http_referer: /login-page/
login: Login
redirect:
Спасибо!
Ответы (2 шт):
Если не очень заморачиваться, то смотреть надо в сторону Chrome HeadLess. В этом режиме хром ничего не показывает, но ведет себя как абсолютно полноценный браузер. Управлять им при этом можно программно.
#import requests
#from bs4 import BeauifulSoup
url = 'https://this/is/my/URL'
our_data = {'key':'value'}
hiden_key = 'user-registration-login-nonce' #Нужно достать значение к этому ключу
#Создем текущюю сессию:
ses = requests.Session()
#Отправляем первый запрос на сервер, чтобы добыть значение:
s_response = ses.post(url, data = our_data)
#Если сервер ответил корректно (status_code == 200), то извлекаем значение:
soup = BeautifulSoup(s_response.text)
hiden_value = soup.find('input', {'id' : hiden_key}).get_attribute_list('value')
#Добавляем пару ключ-значение в форму запроса:
our_data[hiden_key] = hiden_value
#Теперь, когда значение у нас, снова делаем запрос:
s_response = ses.post(url, data = our_data)