@Eltorniado

Как зайти в аккаунт на сайте через requests?

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

Вот есть код для авторизации:
import requests

data = {
  'email' : 'moyapochta@gmail.com',
  'password' : 'qwerty123'
}

ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'

s = requests.Session()
r = s.post('https://dobro.ru/login?d=1', data = data, headers = {'User-Agent' : ua})

print(r.text)


Делаю запрос. Получаю страницу регистрации, а не мой кабинет личный, на который я зашел. Так и не смог зайти..........

В html коду который я получаю, сменяется только то, что рядом с name = "email" стоит value = "moyapochta@gmail.com", казалось бы, все должно работать, моя почта занеслась в рег поле для логина. Но пароль остаётся пустым. Ну, может это так и должно быть, пароль же не видно, он "секретный".

Но все же я так и не смог авторизоваться. Перепробовал много чего, и на разных сайтов. Не получается.... Просветите пожалуйста, желательно еще и с кодом
  • Вопрос задан
  • 366 просмотров
Решения вопроса 1
danila763
@danila763
Учу python, sql
О, как раз недавно этим занимался.
Рассмотрим код формы на сайте dobro.ru (который вы используете)
Вот он:

<form action="https://dobro.ru/login?d=1" method="post">
        <input type="hidden" name="_csrf_token" value="avtoskx3IEw4OpCPeHN5g94SceriuwMB4AgyeLLR9h8"/>
        <div class="row mb-3 mb-md-4">
            <div class="col-12">
                <div class="form__group">
                    <input type="email" value="" name="email"
                           placeholder=" " required class="form__input form__input_text"/>
                    <span class="form__input_label">Электронная почта</span>
                </div>
            </div>
        </div>
        <div class="row mb-3">
            <div class="col-12">
                <div class="form__group">
                    <input type="password" name="password"
                           placeholder=" " required class="form__input form__input_text"/>
                    <span class="form__input_label">Пароль</span>
                </div>
            </div>
        </div>
        <div class="row mb-3 mb-md-5">
            <div class="col-6 text-left">
                <div class="custom-control custom-checkbox">
                    <input type="checkbox" name="_remember_me" id="_remember_me"
                           class="form__input_checkbox custom-control-input"/>
                    <label class="custom-control-label required"
                           for="_remember_me">
                        Запомнить меня
                    </label>
                </div>
            </div>
            <div class="col-6 text-right">
                <a href="/password/reset/request">Забыли пароль?</a>
            </div>
        </div>
                <div class="row mb-3">
            <div class="col-12">
                <button type="submit" class="button button--pink button--height-48 js-login-form-submit"
                        style="border-radius: 4px;">Войти
                </button>
            </div>
        </div>
        <div class="row mb-4 mb-md-5">
            <div class="col-12 text-center">
                <p class="d-inline-block ml-4">Нет аккаунта?&nbsp;</p>
                <a
                        href="/register"
                        onclick="ym(58966471,'reachGoal','clickregister')"                >Зарегистрируйтесь</a>
            </div>
        </div>
            </form>



все строки вида
<input type="password" name="password"

Это то, что надо передать сайту для входа

Вы не передаете 2 вещи - checkbox и token
и если у checkbox вы знаете значение по умолчанию, то токен каждый раз будет меняться и вам надо каждый раз парсить его перед входом. В свое время я писал функцию для получения data
def get_data(html, link):
    """
    Поиск формы с указанной ссылкой post
    """
    # Если html просто текст, превращаем его в объект BeautifulSoup
    if str(type(html)) != "<class 'bs4.BeautifulSoup'>":
        html = bs(html, 'lxml')
    # Собираем и возвращаем словарь
    return dict((i.get('name'), i.get('value')) for i in html.find('form', action=link).find_all('input'))

Как использовать:
html = r.get("https://dobro.ru/login?d=1", headers=headers)
data = get_data(html. "https://dobro.ru/login?d=1")
# Второй параметр это ссылка указанная тут: <form action="https://dobro.ru/login?d=1" method="post">
data['login'] = login
data['password'] = password
# Ваши логин и пароль
r = s.post('https://dobro.ru/login?d=1', data = data, headers = {'User-Agent' : ua})


Естественно я показал не весь код, а ту часть где получаем data
Если у вас что - то не получится, напишите - помогу
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
28 нояб. 2024, в 05:21
2000 руб./за проект
28 нояб. 2024, в 05:18
500 руб./за проект
28 нояб. 2024, в 03:51
3500 руб./за проект