Как я библиотеку для Дневника МЭШ писал

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

  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, что значило выполнение кода который находится в тэге . И Ваня пытался делать timeout (чтобы страница успела «загрузится»). Без успешно.

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

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

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

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

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

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

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

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

ec249456e510dc46d657bae43c61c3f2.png

Я нашел основной 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 Сама библиотека

© Habrahabr.ru