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

14.12.23

Интеграция - WEB-интеграция

Программная обертка для управления автономным сервером webdriver, а также сервером selenium grid.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ДрайверChrome.epf
.epf 12,26Kb
13
13 Скачать (1 SM) Купить за 1 850 руб.

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

1. Использование эндпоинта(ов) приложения. В этом случае есть большой минус - мы используем недокументированный интерфейс, соответственно нам придется через инструменты разработчика браузера просматривать исходящие запросы и выводить закономерности для использования их в своем коде. Так-же интерфейс может быть очень сложный, и может потребоваться много времени для того что бы разобраться даже в элементарных действиях, не говоря уже о том что может использоваться ws протокол, который в 1с пока не поддерживается (на момент выпуска публикации).

2. Использование интерфейсов браузера, например COM интерфейс internet explorer, сервер инструментов разработчика того же хрома и т.д.

Предлагаю вариант решения для второго способа. Написание данного решения вдохновлено статьей Управление Selenium Web Driver из 1С (или парсинг из 1С по-взрослому).

Предварительные действия:

1. Установка webdriver, selenium grid.

Установку можно посмотреть в статье Управление Selenium Web Driver из 1С (или парсинг из 1С по-взрослому).

Если вам не нужен selenium grid, можно обойтись без установки Java, достаточно будет просто запустить веб драйвер на нужном порте.

2. Создаем в конфигурации (расширении) обработку.

Она нужна для использования в качестве инстанса браузера, для удобства использования и читабельности кода. 

Обработка будет с двумя реквизитами: "ИдентификаторСессии" - Строка(128) и "НеЗакрыватьПриОшибке" - Булево. Код модуля объекта обработки:

 
Код модуля

Далее во всех примерах будет использоваться созданный объект данной обработки, название переменной - "Браузер".

Примеры использования:

 
 Сессии (открытие и закрытие браузера)
 
 Навигация

 Переход по URL. Обратите внимание, что управление в 1с не вернется пока не будет завершена загрузка страницы. Что браузер будет считать загрузкой страницы - мы можем установить сами см. параметры функции ПараметрыОткрытияБраузера.

Браузер.ПерейтиПоURL("//infostart.ru/"); // Нужно писать полный адрес, инфостарт съедает протокол

Получение текущего URL.

Расположение = Браузер.ТекущийURL();

Получение заголовка страницы.

НаименованиеДокумента = Браузер.ЗаголовокДокумента();

Переход вперед по истории.

Браузер.Вперед();

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

Браузер.Назад();

Обновление текущей страницы.

Браузер.Обновить()

 

 
 Работа с контекстом (выполнение скриптов и код страницы)
 
 Работа с cookie
 
 DOM элементы (поиск, значения свойств и т.д.)
 
 Интерактивное взаимодействие с элементом
 
 Скриншоты

Это основные примеры использования, которых хватит для 99% задач. Если нужны более продвинутые функции, например переопределение позиции геолокации или установка сразу всех cookie для всех сайтов (например при открытии браузера), то нужно смотреть Chrome DevTools Protocol, они дают практически безграничные возможности. При запуске сессии в веб драйвере эти инструменты доступны по тому же эндпоинту что и сессия. Пример установки cookie для всех доменов сразу через DevTools Protocol:

Команда = Новый Структура("Метод, Шаблон");
Команда.Метод	= "POST";
Команда.Шаблон	= "/session/[session id]/chromium/send_command";

Параметры = Новый Соответствие;
Параметры["cmd"] = "Network.setCookies";
Параметры["params"] = Новый Структура("cookies", МассивКуки);

Браузер.ВыполнитьКоманду(Команда, Параметры);

Для самых ленивых, кому лень создавать самому обработку из п.2, добавляю в публикацию готовую.

Тестировалось на демке БСП 3.1.7.343.

Расширение Платформа 1С v8.3 Инструменты и обработки Программист http web IE selenium селениум парсер

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17780    19    22    

16

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19844    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14421    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1168    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mc2 18 19.10.23 22:34 Сейчас в теме
Огромное спасибо за ваш труд и его публикацию. Обработка очень пригодилась!
2. ONLYTILT 20 24.10.23 13:14 Сейчас в теме
3. fixin 4273 20.12.23 21:07 Сейчас в теме
Спасибо, посмотрел как делать ExecuteScript, правда передать туда элемент не удалось, поэтому находил его самим скриптом.

	ТекстСкрипта = "xPathResult = document.evaluate('.//input[contains(@aria-label, ""Дата начала периода"")]', document);
	|if(xPathResult){
	|	element = xPathResult.iterateNext();
	|	//element.value = '11.01.2023';
	|	element.click();
	|	return element.value + ' ::: ' + element.outerHTML;
	|}
	|else return 'Not found';
	|";

Показать


Думал, у вас реализовано Actions, хотел глянуть. Но увы, нету. Но потом не понадобилось. Зато глянул, как получать размеры элемента (rect), уже неплохо.
4. altar 234 26.02.24 10:57 Сейчас в теме
Здравствуйте)
Отличная статья, спасибо за кучу сэкономленного времени!
Подскажите пожалуйста как организовать подключение к уже существующей сессии ,браузера после кокончания выполнения кода по её запуску?
5. ONLYTILT 20 26.02.24 11:12 Сейчас в теме
(4) Команды отправляются по адресу /session/{session id}/..., где {session id} - идентификатор сессии, возвращающийся после ее создания
6. altar 234 26.02.24 17:21 Сейчас в теме
Спасибо, это я нашел)
Вопрос в поддержании рабочего окружения вокруг тестируемого сеанса.
Селениум достаточно быстро гасит подключаемую сессию.
При возникает потребность сохранения им восстановления рабочего окружения данной сессии для того, чтобы, например, не проходить повторно авторизацию с помощью капчи и т.п.
Решение данной задачи в рамках Пайтона врода как имеется (https://qna.habr.com/q/987257?ysclid=lt2pzem0ha785491880).
Возможно адаптировать данное решение в Вашу библиотеку?
Если интересно, готов пообщаться в Телеге (@Altarol)
7. ONLYTILT 20 27.02.24 09:29 Сейчас в теме
(6) А, вы про сессию на каком то сервисе? тогда просто сохраняйте куки и потом ставьте их при запуске, пример есть в статье
8. ONLYTILT 20 27.02.24 10:09 Сейчас в теме
(6) Либо увеличить таймаут сессии ключом запуска --session-timeout
https://www.selenium.dev/documentation/grid/configuration/cli_options/
9. oldy 3 06.08.24 21:56 Сейчас в теме
Будет ли эта история работать из фонового задания на сервере? Мне селениум не нужен, только связка 1С-вебдрайвер-хром. Погонял в тестовой среде, в которой клиент и сервер на одной машине развернуты, и меня смутило, что запускается окно хрома. Как это будет выглядеть в отсутствие активных пользовательских сеансов? И, кстати, как запустить веб-драйвер в виде сервиса тогда?
10. oldy 3 07.08.24 13:55 Сейчас в теме
(9) Затупил, извините. Можно запускать с помощью планировщика с триггером "При включении компьютера", а можно прямо из кода 1С, например обернув в попытку-исключение (чтобы не запускать лишние экземпляры):

	Попытка
		Браузер.Открыть(9515); // Chrome driver стартует на этом порту по умолчанию
	Исключение
		ЗапуститьПриложение("<Путь к веб-драйверу>\chromedriver.exe");
		Браузер.Открыть(9515);
	КонецПопытки;


Оба варианта проверил, рабочие. Окно браузера при этом в сеансе не появляется
Оставьте свое сообщение