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

    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
    Если у вас что - то не получится, напишите - помогу
    Ответ написан
    5 комментариев