Борьба с Сбербанком через Selenium Web Driver

Спойлер: Борьба завершилась успехом!

Пробую установить период загрузки выписки:

Пробую выполнить такой JS-Script через метод 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';
"

Получаю ответ:

{"value":"11.01.2023 ::: \u003Cinput aria-label=\"Дата начала периода\" data-analytics-action=\"click\" data-analytics-label=\"date from in date range\" maxlength=\"10\" class=\"input__bfd0e3fe empty__5743981f\" type=\"text\" spellcheck=\"false\" value=\"дд.мм.гггг\">"}

Элемент я определил правильно, value вроде бы и устанавливается скриптом, но остается прежней. Странно.

Если повторно не устанавливать значение value (закомментировать установку значения), то все равно в качестве value возвращается 11.01.2023, но на страничке от этого ничего не меняется:

Продолжил борьбу.

И совершенно случайно обнаружил, что в форме запроса выписки две области по вводу даты:

И по закону подлости XPath возвращал мне более нижнюю, скрытую.

Я переписал условия поиска, чтобы находились те поля вводы даты, где не стоит «дд.мм.ггг» в качестве значения:

	InputID1 = SeleniumGetElementByXpath(Session, ".//input[ contains(@aria-label, 'Дата начала периода') and not(contains(@value, 'дд.мм.гггг')) ]").id;
	InputID2 = SeleniumGetElementByXpath(Session, ".//input[ contains(@aria-label, 'Дата окончания периода') and not(contains(@value, 'дд.мм.гггг')) ]").id;

После этого посмотрел, как корректно заполнять поля, обнаружил что нужно сначала очистить поле, потом кликнуть по нему, а затем переместить курсор влево с помощью кнопки Home (код 011):

	Р = SeleniumClear(Session, InputID1);
	Р = SeleniumClick(Session, InputID1); 
	Р = SeleniumSendKeys(Session, InputID1, "\uE011" + Формат(Дата1, "ДФ=ddMMyyyy") + Символы.ПС); 
	
	Р = SeleniumClear(Session, InputID2);
	Р = SeleniumClick(Session, InputID2); 
	Р = SeleniumSendKeys(Session, InputID2, "\uE011" + Формат(Дата2, "ДФ=ddMMyyyy") + Символы.ПС); 

Поля устанавливаются так, как мне нужно:

Далее кликаю на кнопке получения выписки и все загружается.

В файле выписки видно, что период стоит корректно:

Так что никаких защит Сбербанк от Selenium не делает и все работает корректно.

При этом пришлось пощупать метод Execute Script. Скопировал его реализацию в обработке на Инфостарте.

Хорошо что не дошел до использования Actions, тем более никто не знает, как их применять через костыли WebDriver API. Задал вопрос на stack, но не думаю, что ответят.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *