Yota-script или экономим c Yota кроссплатформенно

в 19:06, , рубрики: javascript, LTE, phantomjs, Yota, метки: , ,

Доброго времени суток, уважаемые читатели.
Пару месяцев назад и до нашего города добралась цивилизация в виде Yota. После беглого осмотра личного кабинета и выяснения что тарификация работает с точностью до минуты появился автоматизационный зуд :) Тут еще подвернулся топик Экономим затраты на интернет от Yota и понеслась. Главная проблема которую я хотел решить — позволить управлять своим тарифом из командной строки (к примеру с помощью crontab) кроссплатформенно т.к. сам давно живу под Arch Linux в качестве основной операционной системы.

Подбираем ингредиенты

Имея некоторый опыт с различными фреймворками для тестирования web-страниц я было ринулся за привычный Selenium, но подумал что желательно бы обойтись чем-то по-проще да по-интереснее. Захотелось попробовать что-то новое.
Итак, нам нужен headless браузер с каким-никаким API. Кандидаты:

Строго говоря первые два являются binding'ами nodejs для Selenium, но попробовать их стоило. В итоге прототип приложения был написан, но получилось слишком сложно и громоздко. Далее был опробован Zombie.JS, но увы что-то не заладилось после успешной авторизации — страница кабинета никак не хотела рендериться. В итоге выбор пал на PhantomJS.

Алгоритм работы

После небольшого анализа странички личного кабинета оказывается, что слайдер скорости устроен весьма просто. Открываем обширную документацию по PhantomJS, берем первый попавшийся пример и модифицируем под себя:

  • загружаем страничку входа
  • заполняем поля логин/пароль
  • кликаем кнопку входа и ждем пока произойдет авторизация
  • получаем список тарифов
  • ищем нужный тариф
  • сабмитим форму.

В итоге получился скромный скрипт который уютно расположился вот тут https://github.com/linx56/yota-script.

Возможности yota-script

PhantomJS — кроссплатформенное программное обеспечение, поэтому работать предложенное решение должно везде, где он может запуститься.
Вызов yota-script выглядит примерно так:

phantomjs yota.js your_login your_password [command] [parameter]
Доступные команды:

check — команда по-умолчанию которую можно опустить, покажет текущие условия и остаток в днях
switch — активирует тариф, обязательный параметр — скорость, один из результатов команды list
list — список параметров для switch с описаниями
Пример:

phantomjs yota.js your_login your_password switch 5.0

Переключит тариф на 5 Мбит/с

Ограничения и известные проблемы

Периодически отваливается по таймауту переключение тарифа. Баг неустойчивый, проходит сам по себе. Для отладки можно воспользоваться параметром --debug=yes. Думаю также не лишним будет предупредить, что действия производимые данным скриптом вполне легальны, однако в любой момент позиция компании Yota может измениться.

Планы по развитию

В настоящий момент этот скрипт просто работает по crontab т.к. у меня вполне предсказуемый график пользования интернетом. Однако нет предела совершенству и я подумываю написать простенький анализатор занимаемой полосы, дабы переключать скорость исходя из потребности в ней. Предложения и комментарии как лучше это реализовать с удовольствием принимаются.

Автор: linx56

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js