Заполнение полей ввода на сайтах

Довольно часто возникает необходимость в заполнении различных полей ввода на сайте. Давайте рассмотрим некоторые варианты как это сделать во встроенном браузере средствами платформы RPAbot.

Пример 1: Заполнение формы "Заказать консультацию" на сайте ГИС ЖКХ.

На сайте ГИС ЖКХ (https://gisgkx.ru/) произведем клик на кнопке "Оставить заявку":

Перед нами откроется форма "Заказать консультацию", в которой три поля. Одно обязательное для заполнения (номер телефона) и два необязательных (фамилия, имя и ваш вопрос). Давайте заполним все три поля.

Посмотрим свойства этих полей на примере первого поля (клик ПКМ на необходимом элементе, выбор из контекстного меню "Показать в Инспекторе"):

Видим что это поле ввода телефона - тег INPUT за работу с которым отвечает объект платформы input (Объект input).

Самый простой вариант добавления информации в input - с помощью одной из команд семейства set_value_by_xxx. Так как у данной команды есть name то используем команду set_value_by_name() (Команда set_value_by_name() ).

Создадим переменную $phone и присвоим ей значение любого тестового номера телефона.

Пробуем запустить робот. Можно видеть что робот успешно ввел номер телефона в необходимое поле.

Нажимаем кнопку "Отправить". Появилось предупреждение что не все обязательные поля заполнены.

Разбираемся почему так. Пробуем вручную ввести номер телефона в поле. Видим что цифры номера вводятся через тире. А робот вводил слитно..

Дело в том что некоторые сайты для защиты от роботов на поля ввода текста добавляют различные java script-ы которые реагируют на различные события: клик по полю, движения мышкой и т.д. И без данных событий не срабатывают. Мы же ввели цифры номера телефона напрямую в input минуя работу с JS.

Для того чтобы обойти данное ограничение воспользуемся командой эмуляции клавиатуры send_keyboard_input_by_name() которая эмулирует ввод текста с помощью клавиатуры посылая необходимые события браузеру (Команда send_keyboard_input_by_name()).

Запустим робота предварительно очистив поле ввода телефона.

Можно видеть что робот успешно ввел номер телефона.

Поле ввода фамилии заполняем аналогично.

Посмотрим на поле ввода вопроса. Это еще одна разновидность поля для ввода текста. Тег TEXTAREA. За работу с ним в программе отвечает объект textarea (Объект textarea).

Предположим что эмуляции клавиатуры не понадобится и воспользуемся простой командой $textarea→set_value_by_name() (Команда set_value_by_name()).

Запустим робота. Робот успешно заполнил все поля.

При клике на кнопку "Отправить" форма успешно отправляется..

Исходя из данного примера можно сделать следующий вывод: для работы с полями ввода текста в платформе предусмотрено два объекта - input и textarea. Данные объекты имеют команды которые позволяют заполнять разнообразные поля ввода на сайтах используя различные атрибуты у тегов отвечающих за данные поля, а также могут применять вариативные принципы заполнения полей от простого ввода информации непосредственно, до работы с событиями использования мыши и клавиатуры посылаемых в браузер.

Пример 2: Заполнение поля поиска на сайте Госуслуг

В первом примере данной статьи мы заполняли поля на сайте с помощью команд функциональных объектов платформы input и textarea. Во втором примере используем другой функциональный объект платформы - interface.

Прежде всего давайте кратко разберемся что такое интерфейс?

Interface это объект для управление элементами на текущей странице. Если при работе с элементами через простые команды робот каждый раз для выполнения этой команды опять ищет элемент в дереве тегов и осуществляет необходимое действие, то при работе через интерфейсы робот один раз получает идентификатор на этот элемент и далее сразу получает доступ ко всему многообразию команд для работы с ним (/interface/)

Давайте перейдем на сайт Госуслуг (https://www.gosuslugi.ru/.) и попробуем ввести какую либо информацию в поле поиска.

Исследуем элемент через Дерево.

Видим что это textarea обернутый в div.

Переходим в Инспектор для поиска уникального свойства у данного элемента с помощью которого можно однозначно идентифицировать его на странице. Находим свойство "inputmode" со значением "text".

Получим интерфейс данного элемента с помощью команды

$obj = $textarea->get_by_attribute("inputmode", "text", true);

Описание команды get_by_attribute()

Далее для срабатывания всех JS "прикрученных" к данному полю с помощью полученного интерфейса произведем эмуляцию клика левой кнопки мыши.
Описание команды interface->send_mouse_click()
$obj→send_mouse_click();

После этого введем непосредственно необходимую фразу. Опять же с помощью полученного ранее интерфейса.
Описание команды interface->send_input()
$obj->send_input("Как мне зарегистрироваться?\n");
Символ "\n" в конце фразы эмулирует нажатие клавиши "Enter".

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

Например: получить интерфейс и сразу "клинкуть" по нему:
$textarea->get_by_attribute("inputmode","text", true)->send_mouse_click();

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

Получить консультацию