Немного о себе

  1. Я занимаюсь Backend, Frontend (для описания своей идеи, фронт не люблю) разработкой

  2. Я школьник, перехожу в 8 класс

  3. Учусь в Москве

  4. Люблю Linux

  5. Учусь кодить с 11 (мне 13)

Как мне пришла эта идея?

Я учусь в Москве с 2020 года. Нас сразу перевели на ЭЖД (электронный дневник города Москвы) или же МЭШ (Московский Электронный Журнал). Ну и в то время я начал учиться кодить (Python) и нашел статью про парсинг. Мне стало интересно и я начал работать с requests, beautifulsoup4 и другими библиотеками для парсинга HTML страницы. Ну и в мою голову пришла идея: "Написать парсер Дневника МЭШ"

Первый этап. Пробуем просто парсить HTML

Ну я начал пытаться сделать парсер HTML страницы. У сайта ЭЖД есть один нюанс - при каждом заходе на сайт, надо нажать кнопку "Войти". Ну переходишь на URL dnevnik.mos.ru, происходит 307 статус код и кидает на school.mos.ru (ну вот такая кривая система). И еще одна проблема для меня 11-ти летнего - сайт написан на ReactJS, что значило выполнение кода который находится в тэге <noscript></noscript>. И Ваня пытался делать timeout (чтобы страница успела "загрузится"). Без успешно.

Второй этап. Selenium и бан в МЭШ

К тому времени я уже познакомился с Selenium и думал написать библиотеку на нем. Продумал все пути, как я буду делать. И настал момент. Моя программа на Selenium заходит в МЭШ. Я был рад первые 2 дня. Потом меня выкинуло из МЭШ (после перезагрузки телефона, немного кринж система) и я попытался зайти. Ввожу пароль, неверно. Ввожу еще раз пароль и система говорит мне:

В качестве безопасности мы поменяли вам пароль.

Это было жестко, ведь я не мог его поменять (тогда аккаунт был полностью привязан к родителям), поэтому я обратился к маме. Долбанное приложение МЭШ. Форма для смены пароля была неверной, и на половину 6 класса я остался без Дневника. Восстановил я его только в начале 7 класс (МФЦ, техподдержка и тд).

Третий этап. Написание библиотеки на базе их API

Летом мне стало скучно и я решил найти API Яндекс.Музыки и наткнулся на статью одного человека (спасибо, @MarshalX с названием

Как я библиотеку для сервиса «Яндекс.Музыка» писал

И понял как сниффить трафик с компа. Но так как доступа к МЭШ не было, я подзабил на писал легкие Pet-проекты на FastAPI (так я и понял как работают API). Как только получил доступ к Дневнику МЭШ, я начал анализировать весь входящий и исходящий трафик dnevnik.mos.ru. Сидел я где-то дня 3 и потом

Я нашел основной URL API. Я был очень рад и сидел 2 недели с Postman и Burpsuite. Пришел день X. Я сел и за один вечер написал первый набросок библиотеки dnevniklib (версии 0.1.0). Все работало через зад одно место и я ее постоянно дописывал. Но сама библиотека была рабочей, ей можно было пользоваться. Она состояла из 4 классов:

  • School (данные школы)

  • Marks (данные оценок)

  • User (данные юзера)

  • Homeworks (данные Д\З)

Она работала вполне нормально, только токен получать было впадлу иногда. Ну все работало отлично

Интересный момент. Авторизация

Для авторизации в МЭШ надо было получить дофига токенов сессии, что было сложно сделать. Поэтому на первой версии README.md состояла из инструкции как получить Auth токен (по cookies). Мда. Вспоминаю, написал отдельный проект на Selenium для получения токена. Он был в виде странички на HTML (на сервере был Flask и Selenium) который заходил, вводил данные юзера и из кукисов доставал auth_token. Было весело, ведь у меня даже получались какие-то проекты на ней. Я был счастлив.

Версия 0.8. Поменяла все

Стало мне как-то скучновато. Решил написать класс UserToken для авторизации юзера. Была авто конфигурация (UserToken(name=".", password=".", browser="chrome").configure()) JSON файл с названием dnevnik.json хранил в себе такую инфу:

{
"browser": "chrome",
"driver": "./chromedriver"
}

И тут как вы поняли, задействован Selenium. Но автоконфигурация происходила по принципу:

1. распознание ОС (WIN, Linux, Darwin(MacOS) )

2. Человек пишет название браузера (chrome, firefox)

3. Файл скачивается и разархивируется и корень проекта

Так и работал конфиг. Это работало довольно хорошо, и работает до сих пор. Но в последнее время я не использую ее, ведь идей нет. Все реализовано.

Один из проектов. DnevnikMOSBot в Telegram

Я его писал наверно в 20-ых числах декабря 2022 года. Каникулы и скука. Сел, написал и радостный.

Конец

Спасибо за чтение моей статьи! В скором времени я собираюсь переписать библиотеку и сделать быструю авторизацию

Материалы:

  • https://xd1rty.t.me Мой телеграм (для связи)

  • https://github.com/xD1rty Мой GitHub

  • https://github.com/xD1rty/dnevniklib Сама библиотека

Комментарии (17)


  1. 13werwolf13
    01.06.2023 11:34
    +2

    Каникулы и скука. Сел, написал и радостный.

    отличный подход к выбору времяприпровождения, прям завидую. в вашем возрасте ПК был мне недоступен, и скучные дни я проводил за книгой (что тоже полезно, но теперь я слеп как крот).
    хорошо что:
    1) знания есть откуда получать, и не из одного места (мой опыт гласит что школа в этот список не входит)
    2) ещё остались юнные таланты которые тратят время на получение знаний и практической их применение (важно именно оба пункта)

    искренне желаю не останавливаться на достигнутом и продолжать! мой личный респект!!


    1. DirtyHornet Автор
      01.06.2023 11:34
      +1

      Спасибо большое! Очень часто могу сесть и написать проектик.


    1. user18383
      01.06.2023 11:34

      Это что же у вас за жизнь, раз вам кажется интересным писать интерфейс к проприетарному api.

      Не в обиду автору!


      1. 13werwolf13
        01.06.2023 11:34
        +1

        Разрбраться как работает какая нибудь неведомая х***ь это всегда интересно. Принесёт ли это пользу - другой вопрос.

        Я ведь имел ввиду не конкретный проект, а в целом подход.


      1. DirtyHornet Автор
        01.06.2023 11:34

        ну я пользуюсь МЭШОМ и приложение пипец какое кривое. поэтому сделал это. спасибо за прочтение статьи


  1. Olegun
    01.06.2023 11:34
    -4

    Предлагаю в дополнении к Python выучить Русский.


    1. DirtyHornet Автор
      01.06.2023 11:34

      можете пожалуйста сказать , где ошибки?


      1. Kostyukov
        01.06.2023 11:34

        Не обращайте внимание на недоботов-алкоголиков. У Вас проблема не в грамматике, а просто в стилистике написания текста, а именно банально в силу возраста не хватает опыта написания статей, поэтому я бы даже не стал бы на это обращать внимания. Продолжайте учиться. У Вас всё получится. Всех благ :-)


      1. Olegun
        01.06.2023 11:34

        Учусь в Москва


        1. DirtyHornet Автор
          01.06.2023 11:34

          вы серьезно?


          1. MihaTeam
            01.06.2023 11:34

            Я думаю не имеет смысла ожидать чего-то внятного от человека, который зарегистрировался в 11 году, не сделал за это время ни одной публикации и при этом как-то смог удержать карму меньше 10.
            И признаюсь честно, статья интересна, но не содержанием, а из-за вашего возраста. Меня максимум хватало на почистить комп от вирусов на тот момент)
            Кстати, насколько я вижу вы пока не выбрали конкретное, интересное для вас, направление в разработке? Всё же бекенд бекенду рознь. Можно джсоны по круду перекидывать, но это далеко не самое интересное занятие.


            1. DirtyHornet Автор
              01.06.2023 11:34

              ну почему? я занимаюсь разработкой одного интересного продукта (возможно, позже напишу что это) и там самое главное как жсон кидать, а как реализовать систему. и это интересно с точки зрения разработки


              1. MihaTeam
                01.06.2023 11:34

                Мы видимо не совсем друг друга поняли)
                Практический каждый проект в том или ином виде кидает данные, но не в каждом проекте есть какая-то интересная логика к этому.
                Ну и пример - аутентификации и авторизация в стейтлесс микросервисах. По факту это в основном простые круды, но вариантов реализации там достаточно много и у каждого есть свои плюсы и минусы. Ну или другой пример, уже скучного круда, практически каждый гайд на какой-нибудь язык или фреймворк.


            1. DirtyHornet Автор
              01.06.2023 11:34

              согласен, пет проекты нашего времени состоят из крудов и дефолт апи, которое есть уже везде. интересно придумывать как это дефолт апи превратить во что то интересное, например, можно прикрутить сокеты (возможно) ну или что то подобное, я не останавливаюсь на данном этапе и я буду делать продукты


  1. java3000
    01.06.2023 11:34

    С такой, дай Бог многим, похвальной тягой к знаниям, я, как отец подобного ребенка, советовал бы автору дополнительно копнуть в глубину: железо, реверс. Я ни разу в жизни не пожалел об этом знании, хотя ни хакером, ни железячником не стал.


    1. DirtyHornet Автор
      01.06.2023 11:34

      здравствуйте, я иногда решаю ctf таски, которые иногда бывают на реверс. ну и ардуино соответственно. но я больше backend)))


  1. Xokare228
    01.06.2023 11:34

    Плюсик в карму. Автор, ты напомнил мне себя молодого. Начинал путь кодинга примерно так же, только вместо МЭШ были ГДЗ :)