Опыт создания клиент-серверного приложения для автоматизации регистрации доменных имен на сайте
Часть первая: структура проекта.
Один из клиентов попросил о помощи в проекте для автоматизации регистрации бесплатных доменных имен на сайте провайдера в автоматическом режиме.
Я ознакомился с сайтом и обнаружил там много JavaScript и было принято решение использовать симуляцию пользовательской активности на сайте с помощью таких инструментов, как Сhromium и Lazarus-IDE на стороне сервера, с установленным там Linux Debian.
Я приступил к тестированию своего решения.
И когда все пользовательские действия были уже закодированы и я подошел к одному из ключевых этапов: ввода логина и пароля, то обнаружил, что на странице, также присутствует защита от автоматического ввода "google ReCaptcha", тогда для взаимодействия с данным элементом был выбран вариант интеграции API для стороннего сервиса Anti-Captcha, через php скрипт, то есть наш симулятор, определив, что требуется решить капчу, генерировал скрипт на php и выполнял его, и получив ответ от сервиса решения "Google reCAPTCHA", выполнялся успешный JavaScript Submit на форме с полученным значением "token". Прежде чем написать новый код, я скачал пробную версию программы HTTP-Analyzer и запустил анализатор трафика на моей виртуальной машине Windows XP. Я ознакомился со всеми результатами запросов сайта с капчей и нашел все необходимые данные для моего нового скрипта для получения значения "token", решения капчи. Один из самых важных моментов, это найти правильный URL для решения капчи на сервисе.
Я запустил скомпилированное приложение и убедился, что ввод данных и капча проходят ровно и без ошибок.
Оставалось настроить веб-сервер Apache на моем тестовом Debian сервере и сделать простую html форму для передачи запросов в наше приложение на сервере, которое запускается на сервере по запросу через эту html форму. Таким образом, на сервере создан еще один скрипт, работающий в терминале, в вечном цикле и проверяющий поступающие запросы на запуск нашего симулятора пользовательской активности с целью регистрации на целевом сайте, как только со стороны клиента через форму на сайте поступал запрос (через файлы с данными для регистрации, там email и пароль). Наш скрипт проверяет, если текущий email не был использован ранее, то запускает из-под X наше приложение, которое само закрывается после выполнения всех необходимых инструкций и получения ответа об успешном создании аккаунта. Иначе скрипт выводит -1 в терминале через определенный интервал времени (что говорит об ожидании входящих запросов от клиента), как видно в самом начале нашего видео ниже.
Практически все моменты были продуманы, протестированы и реализованы, остался самый последний элемент в нашей схеме.
Необходимо было добавить запуск нашего решения в автозагрузку операционной системы после перезапуска нашей виртуальной машины, с запуском X и терминала с запуском нашего "вечного скрипта", который отслеживает запросы, поступающие из формы на сайте.
На наш Линукс сервер я установил программу TightVNC Server и поставил Ripple PRO на свой планшет для подключения к серверу через VNC и мониторинга работы программного комплекса.
Был установлен Xfce и Mate для работы нашего приложения, собранного на Lazarus-IDE с компонентом fpCEF3 для корректного отображения встроенного браузера Chromium.
Задача: запуск при загрузке виртуальной машины, VNC сервера, со стартом X и графической оболочки типа Xfce, с рабочим терминалом, и в терминале запуск php скрипта (который отслеживает поступающие запросы от http клиента).
Для этого выполнил следующие пункты:
редактируем файл /etc/rc.local
И добавим эти строки после #!/bin/bash :
HOME=/root
export USER HOME
exec /usr/bin/tightvncserver -localhost :1
Всё, теперь VNC-сервер стартует при запуске, а ключ "-localhost" позволит подключаться к нему более безопасным способом через SSH.
Перезагрузим сервер и проверим, как это все работает, теперь подключимся к нашему VNC (я в примере использую приложение Ripple PRO на моем планшете, как в видео) на порту 5901 через SSH туннель.
Заходим в настройки в Xfce и настраиваем автозапуск приложений: добавим следующую команду в автозапуск:
/usr/bin/xterm -e /usr/bin/php /var/scriptname.php
Видео о работе системы можно посмотреть вот тут, на YouTube:
Готово, теперь вся система будет автоматически запускаться при старте нашего сервера.
В следующий раз я могу описать более подробно весь процесс симуляции пользовательского поведения в браузере на текущем примере.
Автор: рыцарь со стволом