1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Варианты авторизации на сайте с помощью A-Parser

Варианты авторизации на сайте с помощью A-Parser

  1. Support Artur
    Иногда мы сталкиваемся с тем, что нужно получать данные с сайтов, которые доступны после авторизации. Поэтому в статье рассмотрим 3 основных варианта авторизации на сайте с использованием разного функционала A-Parser. В качестве примера используем ссылку на страницу профиля поддержки на нашем сайте: https://a-parser.com/users/12/, где данные видны только авторизованным пользователям.


    1. Авторизация с помощью HTTP-запроса

    Для начала в обычном браузере откроем Инструменты разработчика -> вкладка Network и переходим по нашей ссылке. Нажимаем кнопку Вход и заполняем данные в форме:

    [​IMG]

    Далее нажатием кнопки Вход отправляем форму и в Инструментах разработчика смотрим на запросы, которые выполняются. Нужно проверить все запросы, которые уходят после нажатия кнопки логина и выбрать тот, в котором вернулась нужная страница или редирект на нее.
    В данном случае нас интересует запрос по адресу
    Код:
    https://a-parser.com/login/login
    т.к. по нему в ответ вернулся редирект на нужную нам страницу профиля:

    [​IMG]

    Видим что это POST запрос, соответственно должно быть тело запроса. Если спуститься вниз, то можно увидеть вкладку Данные форм, в ней содержится тело POST запроса:

    [​IMG]

    Видим, что в теле запроса, в параметре redirect содержится url, на который в случае успешной авторизации будет перенаправлен пользователь. Соответственно нам нужно туда подставлять интересующий нас url.
    В А-Парсере мы будем использовать Net::HTTP Net::HTTP. В Query указываем найденный url запроса, выбираем метод запроса POST, а в POST body копируем строку тела запроса, но заменяем значение в redirect на $query.orig. Так же меняем cookie_check=1 на cookie_check=0, для игнорирования проверки кук. Пробуем запустить задание, указав в качестве запроса интересующий нас url:

    [​IMG]

    [​IMG]

    Видим, что страница открылась, далее уже можно собирать с полученного исходника страницы нужные данные.
    eJx9VFtv2jAU/i8WQptEoUzaSyQeKBraJkYYpE8IVW58EjycnNR2KCjiv/c4CUno
    1r1EOffvOxcXzHJzMCsNBqxh3rZgWfnPPPbtxJNMwd00t/s1vORgLBuwjGsD2rlu
    2RKs530PghXpBUQ8V+RRMHvOgOLxCFpLAWSUguRnFGf6P3KVO7PCWKaTvoZYGgt6
    ct/PuDGvqMWkHyIeJDyFewgPZHg6RQEeoPQWUkNoJz3Co89D1DJml49rJmD3KDpV
    V/4m+F9AmTZCnXDbidpbmxlvNOJ3Ff1hiMmoJFB92WW3GzBqHHXAzKtoj/Wy8bDu
    ZmPc8CMESMZIKmjVc5KWPHG1eoJbcNZhBePT56E9uQxcCGklplxVFdwM2qqPqXwp
    saZIvo6GBDPXmJDKQpmg5HZFt2VVCxmlyMvY31UM8yKuDAyYIahzTkDEe4ukeXGL
    2s8cHtIXDNOpUgs4gmrdyvwPuVSCFmYaUdCPOvDfLv5fOS4NvW4pGtmrJgxNllJ6
    8H+1UQIXGBNz8Uy8lUykJdnMME/dYO5JeQDImp4tXc8S1NCUqTPX1ek+MkjdfrQj
    m2at6obGzVhulSGmkYz9eueunnka0BH66QzdvTleaa4UjcXAul2PqanH4IQW4Pvg
    WVnCUb8eJLOIyvzcVFAzLWn9vjqACXWyW7VOGXKlHteLroW1K/XRNeTuVRiNv4yY
    y2AhRtot4nfZNW9G88oUnZfDKy40rz9mVfk4cs6DdNQlQ8Ng3vjyBvMpoZY=

    Плюсы:
    • Простота
    • Экономит ресурсы
    Минусы:
    • Авторизация при каждом запросе, что может негативно повлиять на аккаунт

    2. Авторизация с помощью подстановки cookie

    По аналогии с первым вариантом, в браузере нам нужно открыть Инструменты разработчика и авторизоваться на сайте. Далее необходимо найти Заголовки запросов.

    [​IMG]

    Смотрим какие куки используются при открытии этой страницы и копируем их все в поле Cookies в парсере (также используем Net::HTTP Net::HTTP). При необходимости также берем остальные заголовки и копируем в Additional headers. В поле запроса указываем наш url и запускаем. Убеждаемся что в ответ пришла страница с нужным контентом. Если все работает, то на этом можно и закончить, но для упрощения обслуживания пресета в будущем, лучше сократить количество кук и заголовков до минимально необходимых. Для этого пробуем убирать куки по одной и запуская каждый раз пресет, смотреть что приходит в ответ. Тем самым, методом исключения оставляем только необходимые. То же самое можно проделать и с заголовками.
    В данном случае нам достаточно только куки xf_session. Запустим задание. Открыв окно дебага, можно увидеть, что данные получены:

    [​IMG]

    eJx9VFtP2zAU/iuVxcPGkoaCCiUITaVatU2MMihPFE2uc5J6OLaxndKq6n/fcZo2
    Kdt4is/tO7cvZ0Uctc/21oAFZ0n8uCK6fJOYfFnQXAsI+4WbDZR65kACoqmxYLzn
    I7kBF8dfx+Nb1CeQ0kI4EqyIW2rAcDUHY3jig3iC8gxo4iMDMqei8B4UgZXhbhm3
    aLgBbjOVT6Q2NMtp3JIqZJTNYCLLT8iUdEaJpqHQmUHckEsLrDAQGngpwDobtzoT
    SRkD7eKWg4WLZi4XAdVacEYdVzJaeM2nxVttLi5eLo/a5wHPaQYRnfO0er7CVG+1
    WmbBYXRYuvb2ACzPJCQhLNiMygwu5pfTkw3ixBcZZpqVxfl3Co7NQssdxC1Lcwhx
    HhmXTWOuEjRKLCOjDpqWAgcWtz7vQSXYe9xKFCtykG4iDaRgvNvMOW3jKGpOOvII
    NuocR9tRhQJLLrDBuGWK8O4hMMWmdLL+/2ZZSY7mZhfpLwvW4jQuoXfCzk5Pu+dn
    nePkPO12E5Z2Wa/HTk7grDc9fg8Yy9NGLZY1ckqFhfXTU0CQpcg3O1Qmp56tB7rT
    rqi7M97TOYwVGlMuoFYPUbrBYfuoBGfqre20BPrwse0WHoEmCffbpGKTwTO+zvog
    +UvZqFToi0+D/Q+NylHluVYpl9vqHslBKROEKMrYn5uYqqOAWCx1SLGQ5K0FuWGo
    U2akfT2oXxEl+0JcwxxE7VbiXxVc+J+sn2LQtyrw3y6jvzDWu/aaqXAlr/iPwg6l
    lK5GP+qoRF2rDDtPpti34Dl3KNuBKqRfzBEqnwH0bmY3fma5MrBLUyFX2fEYaZB+
    //XK+rpW7bWxt5Z9JV6LlGejilNbz0KO8eKN5ED54+b7koUQgefaXU2Pvq3W4IW6
    wLfBgzKFb317/ohTStjv95tSteFIv64vMMdJNrNWkIwK8XB33bSQmlL+bL773xKP
    4CBTyC3sb/20u9C7k75q3Ol4tcZ9/ba3Gx/fnPdAHU7J/64k7qz/AGEyIxk=

    Плюсы:
    • Простота
    • Экономия ресурсов
    • Не происходит авторизация при каждом запросе, что продлевает жизнь аккаунту
    Минусы:
    • Как правило, куки живут не долго
    • Куки могут зависеть от IP с которого проходила авторизация
    • Может потребоваться больше времени для поиска необходимых кук и заголовков

    3. Авторизация с помощью Puppeteer


    Puppeteer - это полноценный браузер (Chrome), A-Parser автоматизирует управление им, благодаря чему парсер сам нажмет на нужные кнопки на странице и введет логин-пароль. Такой метод может быть полезный, когда невозможно найти нужный запрос авторизации (как в способе 1) или для него требуется какой-то динамически генерируемый токен/хэш, который проблематично сгенерировать без выполнения скриптов в браузере.

    Нам нужно получить селекторы для полей логина, пароля и кнопки Вход, чтобы можно было к ним обращаться из парсера. Нужно быть внимательным, т.к. на странице могут быть элементы с одинаковыми именами классов или id. Лучше всего воспользоваться Инструментами разработчика и скопировать нужный селектор:

    [​IMG]

    Найдя необходимые селекторы, создаем JS парсер, в котором описываем всю необходимую логику по открытию страницы, ввода учетных данных и нажатия кнопки:

    [​IMG]

    Тестируем получившийся парсер (для тестов лучше отключить headless) и видим успешную авторизацию:

    [​IMG]


    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
    8rU=

    Плюсы:
    • Значительно более гибкие возможности для разработки
    • Если не закрывать браузер во время работы задания, то обычно достаточно авторизоваться один раз
    Минусы:
    • Требует больше ресурсов
    • Сложнее в разработке
    • Скорость ниже, чем в первых двух вариантах

    Мы рассмотрели основные варианты авторизации на сайте с помощью А-Парсер. Каждый вариант хорош по-своему, выбор варианта зависит от сайта и задач. В следующей статье мы покажем почему может быть плохим решением авторизоваться каждый запрос и как в JS парсере можно реализовать авторизацию один раз и использовать полученную сессию в остальных потоках.
    Варфаламей, aquatell, relay и ещё 1-му нравится это.