Всем привет. Есть сайт, на который с определенной периодичностью приходится заходить и редактировать данные. А точнее устанавливать актуальные цены. Доступ к сайту только с пользовательской точки зрения. Заходим через логин/пароль в браузере.
С целью автоматизации процесса, пишу обработку, которая будет делать это в автоматическом режиме.
Суть в следующем. Нужно зайти на сайт, найти нужное поле цены, изменить его и нажать на кнопку "Сохранить".
По описанию все реализовано следующим образом:
И все вроде бы отрабатывает:
- значения меняются (и в отладчике, и визуально на странице сайта)
- кнопка нажимается
НО после сохранения, при переходе на эту же страницу, значение цены остается прежним!
Если делать все в ручную, то я захожу на сайт, активирую поле "Цена", ввожу значение, и при изменении фокуса на другой элемент, либо при снятии фокуса с текущего, происходит автоматическое сохранение значения.
Если же делать все программно, то поле активируется (Строка 7), цена изменяется (Строка 8) и даже активируется другой элемент (строка 10). Но вот сохранения значения в момент убирания фокуса не происходит.
Если после программного изменения значения, мышью ткнуть на другое поле, то сохранение происходит.
При этом свойство "ActiveElement" меняет значение и при программном изменении фокуса, и при нажатии мышью.
Такое ощущение, будто программно фокус устанавливается как-то не так. Не до конца активизирует элемент или что-то в этом роде.
Будьте добры, подтолкните мои мысли в нужном направлении...
С целью автоматизации процесса, пишу обработку, которая будет делать это в автоматическом режиме.
Суть в следующем. Нужно зайти на сайт, найти нужное поле цены, изменить его и нажать на кнопку "Сохранить".
По описанию все реализовано следующим образом:
objIE_ОткрытиеСсылки_ДляИзмененияЦены = Новый COMОбъект("InternetExplorer.Application"); //Создаем ComОбъект
objIE_ОткрытиеСсылки_ДляИзмененияЦены.Navigate("https://www.Сайт.ru/"); //Переходим на сайт
Document_ДляИзмененияЦены = objIE_ОткрытиеСсылки_ДляИзмененияЦены.Document;
priceCom = Document_ДляИзмененияЦены.getElementsByClassName("bzr-form-control bulletin_adding__field__input"); //Получаем массив с нужным именем класса
ТекущаяСтрока = priceCom.Item(2); //Выбираем нужный элемент класса
Если ТекущаяСтрока.Name = "price" Тогда //На всякий случай проверяем
ТекущаяСтрока.focus(); //Устанавливаем фокус на нужном поле - цена
ТекущаяСтрока.setAttribute("value", Строка(Строка.ПлановаяЦена)); //Изменяем значение
Кнопка = Document_ДляИзмененияЦены.getElementsByClassName("button bigbutton ulletin_adding__submit__button").Item(0);
Кнопка.focus(); //Устанавливаем фокус на кнопке
Кнопка.Click(); // Нажимаем кнопку
КонецЕсли;
ПоказатьИ все вроде бы отрабатывает:
- значения меняются (и в отладчике, и визуально на странице сайта)
- кнопка нажимается
НО после сохранения, при переходе на эту же страницу, значение цены остается прежним!
Если делать все в ручную, то я захожу на сайт, активирую поле "Цена", ввожу значение, и при изменении фокуса на другой элемент, либо при снятии фокуса с текущего, происходит автоматическое сохранение значения.
Если же делать все программно, то поле активируется (Строка 7), цена изменяется (Строка 8) и даже активируется другой элемент (строка 10). Но вот сохранения значения в момент убирания фокуса не происходит.
Если после программного изменения значения, мышью ткнуть на другое поле, то сохранение происходит.
При этом свойство "ActiveElement" меняет значение и при программном изменении фокуса, и при нажатии мышью.
Такое ощущение, будто программно фокус устанавливается как-то не так. Не до конца активизирует элемент или что-то в этом роде.
Будьте добры, подтолкните мои мысли в нужном направлении...
По теме из базы знаний
- Конфигурация Flowcon: Набор инструментов для управления задачами, проектами и бизнесом в 1С
- 1C + Python + Django Rest Framework + Vue.js. Опыт несложной full-stack разработки
- Как разработать Web приложение и остаться 1С-ником
- Когда интерфейсам 1С нужны веб-технологии
- Масштабирование 1С в облачной среде
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Не может быть дело в типе данных?
Вы устанавливаете значение цены строкой, а в интерфейсе - числом. И ваша строка устанавливается, но потом срабатывает какая-то валидация и очищает его?
Может глупость пишу, нет опыта в таких штуках, это просто мысли вслух)
Вы устанавливаете значение цены строкой, а в интерфейсе - числом. И ваша строка устанавливается, но потом срабатывает какая-то валидация и очищает его?
Может глупость пишу, нет опыта в таких штуках, это просто мысли вслух)
Такое ощущение, будто программно фокус устанавливается как-то не так. Не до конца активизирует элемент
Отличий не должно быть, при смене фокуса ничего не происходит, кроме того что элемент становится активным.
Но к смене фокуса может быть привязана какая-то функция JS, которая что-то делает: подготавливает данные для записи в базу, ну или сразу передает что-то в форму. И неизвестно выполняется эта функция в Вашем случае или нет.
Проверьте вот что: При выполнении Кнопка.Click(); в форму отправляется новое значение? или отправляется то которое было ?
Или вообще ничего не передается, т.е. записи не происходит?
(4)
При нажатии на эту кнопку, в отладчике в выражениях находятся те значения, которые только что были установлены строчками выше. Даже если само выражение забить заново, чтобы оно получило актуальные данные, то ничего не изменяется. Получается при нажатии на эту кнопку, дальше уходят нужные значения.
Я тоже об этом думал. И скорее всего так и есть. Но вот почему она не отрабатывает при программном снятии фокуса. Да и вообще как ее увидеть?
Проверьте вот что: При выполнении Кнопка.Click(); в форму отправляется новое значение? или отправляется то которое было ?
Или вообще ничего не передается, т.е. записи не происходит?
Или вообще ничего не передается, т.е. записи не происходит?
При нажатии на эту кнопку, в отладчике в выражениях находятся те значения, которые только что были установлены строчками выше. Даже если само выражение забить заново, чтобы оно получило актуальные данные, то ничего не изменяется. Получается при нажатии на эту кнопку, дальше уходят нужные значения.
Но к смене фокуса может быть привязана какая-то функция JS
Я тоже об этом думал. И скорее всего так и есть. Но вот почему она не отрабатывает при программном снятии фокуса. Да и вообще как ее увидеть?
(5)
Только смотреть исходник страницы и все функции JS которые на ней есть.
А если прямо указан обработчик <fo rm>, где новая цена передается, может вообще не заморачиваться с JS, попробовать отправить нужные данные через HTTPЗапрос. Но тогда придется разбираться с авторизацией.
Получается при нажатии на эту кнопку, дальше уходят нужные значения.
. Чтобы убедиться лучше проверить каким-нибудь монитором типа Postman. Чтобы увидеть какие данные фактически уходят на сайт. И сравнить чем они отличается - когда вручную, а когда через 1С. Там кроме цены скорее всего еще что-то передается - артикулы, разные статусы и еще что угодно может быть в hidden полях.
Да и вообще как ее увидеть?
Только смотреть исходник страницы и все функции JS которые на ней есть.
А если прямо указан обработчик <fo rm>, где новая цена передается, может вообще не заморачиваться с JS, попробовать отправить нужные данные через HTTPЗапрос. Но тогда придется разбираться с авторизацией.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот