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

14.12.23

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
ДрайверChrome.epf
.epf 12,26Kb
17
17 Скачать (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С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2787    3    0    

11

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

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    34862    68    45    

27

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    2550    2    3    

5

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

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

36000 руб.

03.08.2020    19168    23    22    

20

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    18939    54    50    

31

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

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

24000 руб.

27.09.2024    4284    3    2    

4

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    93301    193    217    

344
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. mc2 20 19.10.23 22:34 Сейчас в теме
Огромное спасибо за ваш труд и его публикацию. Обработка очень пригодилась!
2. ONLYTILT 23 24.10.23 13:14 Сейчас в теме
3. fixin 4280 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 23 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 23 27.02.24 09:29 Сейчас в теме
(6) А, вы про сессию на каком то сервисе? тогда просто сохраняйте куки и потом ставьте их при запуске, пример есть в статье
8. ONLYTILT 23 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);
	КонецПопытки;


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