Skip to content

folexz/almaviva

Автоматизация проверки слотов в визовом центре Италии Almaviva в России

Cкрипт умеет периодически проверять наличие визовых слотов на сайте Almaviva и отправляет сообщения о наличии мест в Telegram.

Рассчитан на запуск с macOS.

Пример сообщений

Немного мандежа

  • Я iOS-разработчик и в остальных языках программирования/средах разработки умею работать постольку поскольку.
  • Решение разрабатывалось для себя с помощью ChatGPT, никакой оптимизации под различные платформы/браузеры не предусматривалось, важна была минимальная работоспособность, чтобы впоследствии при получении уведомления иметь возможность спокойно самостоятельно руками записаться в визовый центр.
  • Если есть предложения по улучшению - пришлите, пожалуйста, PR или откройте Issue.
  • Уважаемая Almaviva, я не планирую ничего зарабатывать на этом скрипте.
  • Я просто хотел записаться в визовый центр для подачи на визу, но не хотел сидеть в профильных телеграм-каналах, на форуме Винского, руками заходить на сайт несколько раз в день, и особенно платить каким-то людям за доступ к информации, которая по идее должна быть открытой.
  • У меня нет вопросов почему у вас сделано как сделано, но если вы вдруг это читаете, ради бога, ну сделайте хотя бы API доступности слотов публично доступным.
  • Всё это сношение с вашим сайтом ради одного true/false выглядит перебором, вы таким образом стимулируете продажи всякого говна ботов за деньги и какие-то люди (не вы) на этом зарабатывают.
  • Вам самим сделать официальный канал в телеграм с новостями по слотам стоит примерно ничего, но вы так хотя бы уравняете людей по шансам на запись.
  • Если хотите, сделайте его платным, но это хотя бы будет официальный источник данных.

Функционал

  • Раз в указанный интервал (от 1 до 1 440 минут) скрипт запускает Google Chrome через CDP и проверяет наличие мест в визовом центре.
  • Итог проверки отправляется в чат/канал Telegram, а так же виден в консоли при выполнении скрипта.

А зачем вообще это надо?

  • Сайт визового центра сделан таким образом, что для проверки наличия мест своими руками нужно:
    • Открыть сайт
    • Пройти капчу от Cloudflare
    • Авторизоваться, пройдя капчу от Google
    • Открыть страницу с записью
    • Ввести OTP-код из почты
    • Выбрать город из списка
    • Увидеть наличие мест
  • Скрипт по сути делает то же самое, но за счет взаимодействия напрямую с сервером и того, что большинство проверок, кроме капчи от Cloudflare, ограничивают только взаимодействие на фронте, некоторые шаги исключаются, и путь выглядит следующим образом:
    • Открывается сайт
    • При необходимости автоматически проходится капча от CloudFlare через сервис 2Captcha
      • Сессия капчи живет около 40 минут
    • При необходимости происходит логин
      • Авторизационная сессия живет 1 час
    • Происходит прямой запрос на наличие мест
    • Отправляется сообщение в Telegram

Почему именно Chrome через CDP?

  • Вызов API напрямую (вне контура браузера) блокируется CloudFlare
  • Капча от CloudFlare распознает автоматизированные бразуеры (Selenium и другие)
  • Единственный рабочий вариант, в котором капча от CloudFlare не блокирует доступ к сайту и есть возможность автоматизации - CDP

О конфигурации CloudFlare на сайте

  • CloudFlare на сайте настроен таким образом, что доступ вне России блокируется.
  • Перед настройкой скрипта попробуйте открыть сайт Almaviva, и убедитесь, что он корректно открывается.
  • Если сайт открылся с ошибкой, попробуйте подключиться к другой сети, либо используйте VPN с российским IP.
    • В моем случае, сайт считал, что я не в РФ.
    • Был арендован российский VPS на Aez'e - стоимость самого дешевого тарифа €4.94/мес. (есть оплата РФ картами)
    • Доступ к нему был настроен через Amnezia
    • Там же в Aez'e можно просто купить VPN, и сделать профиль с Российским IP-адресом - стоимость самого дешевого тарифа €1.9/мес. (есть оплата РФ картами)

Что используется

  • Python 3.13+
  • Google Chrome
    • В скрипте сделана завязка на локальный путь /Applications/Google Chrome.app/Contents/MacOS/Google Chrome.
  • Сервис 2Captcha
    • Используется для автоматизированного решения капчи от CloudFlare.
    • Необходим, так как взаимодействие с API Almaviva даже через браузер будет успешным только при наличии решенной капчи от CloudFlare.
    • Платный, решение одной капчи стоит около $0.0029.
    • Достаточно пополнить на $2-3, этого хватит примерно на месяц при условии проверки слотов каждую минуту для одного города.
    • Можно пополнить криптой/картой, выпущенной вне РФ.
  • Telegram
    • Бот, от имени которого будет отправляться сообщение со статусом
    • Канал/групповой чат, с добавленным в него ботом (для каналов - в качестве администратора)
    • Инструкция по созданию бота и получению идентификатора доступна по сслыке

Используемые переменные окружения

  • Интервал проверки в минутах (целое число от 1 до 1440).
  • Город, для которого будут отслеживаться слоты.
  • E-mail аккаунта Almaviva.
  • Пароль аккаунта Almaviva.
  • Ключ доступа к 2Captcha.
  • Токен Telegram-бота, от имени которого будут отправляться сообщения.
  • Идентификатор чата/канала, куда бот будет присылать сообщения со статусом о наличии мест.

Примечание:

  • После первого запуска переменные окружения сохраняются в managers/env_config.json.
  • При повторном запуске скрипта есть возможность отредактировать переменные.
  • Для мониторинга слотов в нескольких городах можно сделать несколько запусков скрипта с разными городами
  • Для каждого из запусков стоит использовать разные учетные записи Almaviva
  • Мне откровенно лень дорабатывать скрипт чтоб он мог смотреть наличие по нескольким городам
  • Дополнительно, если сами попробуете руками в рамках пары минут прокликать все города на сайте, примерно на 5 городе наличие слотов уже не вернется, так как сервер вас заблокирует за слишком частые запросы

Запуск

  1. Клонировать репозиторий
  2. Установить зависимости
    • schedule
    • pychrome
    • requests
  3. Запустить скрипт
    • Скрипт будет выполняться бесконечно, пока вы сами его не остановите.

Моментики:

  • Я делал запуск через PyCharm CE
  • Так как раз в N минут происходит запуск и закрытие Chrome, выполнение скрипта может помешать обычной работе на устройстве
  • Варианты решения:
    • Бесплатный - Создать виртуальную машину, например, через UTM и делать запуск через нее
    • Средней дороговизны (мой вариант) - Запустить скрипт на маке, которым никто больше не пользуется и выполнение скрипта на нем никому не помешает
    • Люкс - Арендовать сервер Mac в облаке (например, в Selectel).
      • В этом варианте я бы предложил задуматься о целесообразности данного мероприятия, так как аренда будет стоить равносильно покупке Б/У устройства с Авито и/или стоимости самой визы.
      • Напоминаю, что в Таиланд даже не нужна виза, а в Южную Корею K-ETA оформляется за полчаса и 700₽ с российского UnionPay РСХБ.
    • Для каждого из городов, скрипт создает профиль Google Chrome по пути ~/almaviva-chrome-profiles/city-{CITY_ID}/, после использования скрипта, не забудьте удалить эти профили.
      • Можно удалить через терминал командой $ sudo rm -rf ~/almaviva-chrome-profiles

Загадка дыры

  • API получения фактора наличия слотов - /getDisponibilityi
  • Теперь думаю, это кто-то опечатался или специально так обозвал?

Если что-то не получилось, напишите мне в телеграм, контакт есть в профиле.

About

Автоматизация проверки слотов в Almaviva Россия

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages