Доброго времени суток, уважаемые читатели.
Пару месяцев назад и до нашего города добралась цивилизация в виде 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