Каталог решений - Альтернатива COM объекту IE

Альтернатива COM объекту IE

Альтернатива COM объекту IE

В наличии

Расширение, представляющее собой программную обертку для управления автономным сервером webdriver, а так же сервером selenium.

Категория:

Описание

Иногда возникает необходимость написания разнообразных костыльных парсеров или, по-новому, роботов RPA. Возникает такая необходимость, например, когда у нужного сервиса банально нет API, либо за доступ к нему просят очень много денег, либо оно есть, но сотрудники тп о нем не знают и не могут ничем помочь (и такое бывало). Тут есть два пути, которые, к сожалению, программист, озадаченный написанием робота, не выбирает:

1. Писать парсер с помощью HTTP запросов. Этот вариант работает только если рендер страниц происходит полностью на сервере (статические сайты) и при нажатии всех кнопок просто происходит вызов сервера и весь код выполняется на нем.

2. Писать парсер, который использует браузер, например опять же COM объект IE.

Сейчас все чаще встречаются динамические сайты, на которых рендер страницы происходит на клиенте в зависимости от данных полученных с сервера, соответственно 1 вариант я практически не рассматриваю за редкими исключениями. Для создания роботов под динамические сайты до недавнего времени я использовал библиотеку selenium под python, неудобность заключалась в том, что на целевом компьютере должен быть установлен питон и сама библиотека, либо сам робот должен быть запихан в исполняемый файл библиотеками типа pyinstaller, так же нужно решать проблему с транспортом между 1с и роботом. И вот наткнувшись на статью Управление Selenium Web Driver из 1С (или парсинг из 1С по-взрослому) у меня возникла идея написать расширение для удобного управления сессиями сервера селениума из 1С. Пример простого робота с использованием расширения:

	// Выводит названия топиков на форуме инфостарт на первой странице
	Поиск = СерверСелениум.СпособыПоискаЭлемента();

	Драйвер = Обработки.ДрайверChrome.Создать();
	Драйвер.Открыть();

	Драйвер.ПерейтиПоURL("//sale.itcity.ru/");

	СписокКлассов	= Драйвер.ЗначениеАтрибутаЭлемета(Драйвер.НайтиЭлемент(Поиск.ПоИмениТега, "body"), "class");
	МенюСпрятано 	= СтрНайти(СписокКлассов, "hidden-menu") > 0 ИЛИ СтрНайти(СписокКлассов, "mobile-view-activated") > 0; 

	Если МенюСпрятано Тогда
		Драйвер.Нажать(Драйвер.НайтиЭлемент(Поиск.ПоXPATH, "//a[@data-action=""toggleMenu""]"));
		СерверСелениумСлужебный.Ожидать(1);
	КонецЕсли;

	Драйвер.Нажать(Драйвер.ПолучитьРодительскийЭлемент(Драйвер.НайтиЭлементПоТексту("Форум")));
	СерверСелениумСлужебный.Ожидать(1);
	Драйвер.Нажать(Драйвер.НайтиЭлементПоТексту("Все вопросы"));

	Топики = Драйвер.НайтиЭлементыПоКлассу("ft-topic-name");
	Для Каждого Топик Из Топики Цикл
		Сообщить(Драйвер.ТекстЭлемента(Топик));	
	КонецЦикла;

	Драйвер.Закрыть();

  

Функционал

На текущий момент реализовано:

1. Сессии:

-Создание сессии (открытие браузера) 

-Удаление сессии (закрытие браузера)

2. Навигация:

-Переход по url

-Получение текущего url

-Переход вперед и назад по истории

-Обновление страницы

-Получение заголовка документа (страницы)

Работа с DOM:

-Поиск элемента(ов) по xpath, селекторам css, тексту ссылки, имени тега и xpath.

-Поиск элементов от заданного элемента по xpath, селекторам css, тексту ссылки, имени тега и xpath.

-Получение значений атрибутов элемента, значений свойств элемента, и значений css свойств элемента.

-Получение текста элемента, имени тега.

Действия с элементами:

-Клик по элементу.

-Очистка поля.

-Отправка нажатий клавиш в поле, в том числе клавиш типо ENTER, BACKSPACE и т.д.

Работа с документом:

-Получение кода страницы.

Прочие функции:

-Выполнение произвольного скрипта в текущем контексте агента пользователя, в т.ч. с работающей передачей аргументов, например:

Функция ПолучитьРодительскийЭлемент(Элемент) Экспорт

	// Элемент - коллекция полученная функциями поиска элементов
	ТекстСкрипта = "return arguments[0].parentNode";
	Аргументы = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Элемент);

	Возврат СерверСелениум.ВыполнитьСкрипт(ИдентификаторСессии, ТекстСкрипта, Аргументы, Соединение)["value"]	

КонецФункции

-Получение, установка и удаление cookie текущего документа.

-Создание скриншота текущей области.

-Создание скриншота определенного элемента.

 

Инструкция

1) Установить расширение в конфигурацию с БСП.

2) В случае если вы хотите запустить сервер драйвера для одного робота, то достаточно запустить хромдрайвер на нужном порте (аргумент —port). В случае если нужен сервер для управления множественными сессиями, то нужно выполнить первые два пункта из статьи Управление Selenium Web Driver из 1С (или парсинг из 1С по-взрослому).

3) Установить порт, на котором вы запускаете сервер в СерверСелениумПереопределяемый.ПортСервера().

4) При желании установить свою процедуру слипа в СерверСелениумПереопределяемый.Ожидать().

5) Писать своих роботов.

Тестировалось на БП 3.0.133.17, УТ 11.5.8.435 и очень древней УНФ.

Интерфейс только программный, графического никакого нет, обработка — просто пример использования этого интерфейса.

has been added to your cart:
Оформление заказа