Ниже приведен фрагмент кода, который я создал на обороте библиотек Requests
и BeautifulSoup
для Python 3.
import requests as rq
from bs4 import BeautifulSoup as bs
def get_data():
return {'email': str(input('Enter your email.')),
'password': str(input('Enter your password.'))}
def obtain_data():
login_data=get_data()
form_data={'csrf_token': login_data['email'],
'login': '1',
'redirect': 'account/dashboard',
'query': None,
'required': 'email,password',
'email': login_data['email'],
'password': login_data['password']}
headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
with rq.Session() as s:
r=s.get('https://www.formstack.com/admin/user/login',headers=headers)
form_data['csrf_token']+=','+bs(r.content, 'html.parser').find('input',attrs={'name':'csrf_token'})['value']
r=s.post('https://www.formstack.com/admin/user/login',data=form_data,headers=headers)
assert('Collect' in bs(r.content,'html.parser'))
obtain_data()
Цель кода - войти в систему. Опросная платформа называется Formstack с использованием учетных данных, полученных с помощью get_data()
. Для этого мы создаем сеанс с использованием запросов. Отсюда мы отправляем запрос get на страницу входа в Formstack. Мы собираем дерево разбора ответа на этот запрос, используя BeautifulSoup, и, следовательно, получаем значение входного тега HTML с помощью name='csrf_token'
(опять же, используя BeautifulSoup), поскольку нам нужно это значение для заполнения формы входа в систему. Отсюда мы собираем форму, обозначенную form_data
в приведенном выше коде, и отправляем запрос на публикацию с помощью этой формы, снова на страницу входа в Formstack. должен войти в мою учетную запись Formstack, но по какой-то причине этого не происходит. Я проверил, что это не так, запустив строку assert()
на содержимом первой страницы, которую я вижу после входа в систему, и, используя этот метод, я всегда получаю ошибку подтверждения.
Я не очень хорошо знаком с веб-скребком в Python, и, следовательно, я не уверен, где go с этой проблемой. Я пытался разрешить перенаправления как в запросе get, так и в запросе post, но в обоих случаях я потерпел неудачу. Спасибо за любую помощь, спасибо.