LINUX.ORG.RU

selenium не обновляет PageSource без пересоздания webdriver-a

 , , ,


0

1

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

...
driver.get("https://node1.online.sberbank.ru/PhizIC/private/cards/info.do?id=XXXXXXXX");
...
while (true) {
Thread.sleep(40000);
driver.navigate().refresh();
Thread.sleep(5000);
count = driver.findElement(By.xpath("//span[@class='detailAmount nowrap']"));
...
}
...
count при этом не меняется. Да и, если выключить headless, видно, что цифры на страничке тоже прежние.

При этом если произвести перевод вебдрайвером, то цифры обновляются. Есть стойкое ощущение, что я что-то делаю не так или не тем.

★★

Основное предположение в том, что кэш не у тебя, а на стороне сервера. Привязанный к кукам. Ничего не поделать, кроме как стереть куки и залогиниться заново.

Еще можно попробовать стандартные действия:

`driver.navigate().refresh();` сделай дважды. Некогда объяснять, были такие баги в Хроме.

``` Actions actions = new Actions(driver); actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform(); ``` (под рукой нету компа чтобы проверить синтаксис, сорри)

SHIFT+CTRL+R тоже попробуй

проверить что движок - Chromium, а не Firefox, и запустить с --incognito, --disable-application-cache и --disk-cache-size=1 в capabilities (емнип "--" нужно убрать в названии опции, когда делаешь это из джавового селениума)

если движок - Firefox,на выключить кэш у него в настройках. Не знаю как это правильно делается в headless, вообще там в реестре есть свойства типа network.http.use-cache (их сильно больше одного!)

stevejobs ★★★☆☆ ()
Ответ на: комментарий от stevejobs

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

Отказать, руками отображает.

проверить что движок - Chromium, а не Firefox

Я со всеми пробовал, даже под виндой ие11, одна и та же хрень. Кеши чистил, ему пофиг. У меня стойкое ощущение что он для себя какие-то опции включает в браузере, потому что рядом пущеный браузер ведет себя иначе. Завтра попробую с твоими опциями пустить, посмотрим.

kravzo ★★ ()
Ответ на: комментарий от kravzo

и еще Thread.sleep понавставляй в секунду-другую, особенно до получения чиселок, а лучше вообще везде. При загрузке могут прийти одни чиселки, и потом поменяться асинхронно через некоторое время

stevejobs ★★★☆☆ ()
Ответ на: комментарий от kravzo

чем один веб-клиент отличается от другого? По айпи, кукам и сессии, наверное. Быть может, наоборот, у тебя что-то из этого слишком рано протухает, и сайт забывает отослать обновления кэша (не знает кому). Может быть, кэш наоборот надо не решать, а все параметры типа максимальной жизни куков выкрутить в максимум

можно еще в нормальном браузере, в developer tools, посмотреть - как приходят новые циферки. Они есть при первом же запросе, или приходят следущими аяксовыми запросами и перетирают ими чиселки, пришедшие в статике. Я так часто делал например - отдать хоть какую-нибудь статику из хтмл-кэша чтобы у юзера хоть что-то на экране появилось, и потом подкорректировать данные следующими запросами. Если это работает у них так, это может сузить спектр возможных ошибок

stevejobs ★★★☆☆ ()
Ответ на: комментарий от stevejobs

чем один веб-клиент отличается от другого?

По большому счету, в этом и вопрос.

По айпи, кукам и сессии, наверное.

Не, есть мнение, что селениум с опциями запускает клиента.

можно еще в нормальном браузере, в developer tools, посмотреть - как приходят новые циферки.

Там не интересно, я смотрел, они в пейджсорсе приходят. Никакого вам джейсона, никакого апи. Одно хтмл-говно.

kravzo ★★ ()
Ответ на: комментарий от kravzo

когда ты делаешь get(url), он том же «табе» меняет урл и говорит браузеру зарефрешить страницу, потом ждет события onDomReady. За исключением специальных случаев вроде перехода по html anchors (a href=«#home»), когда страницу нужно не перезагрузить, а проскроллить до другого места. Тем более оно ее рефрешит на driver.navigate().refresh()

stevejobs ★★★☆☆ ()
Ответ на: комментарий от kravzo

еще можно между запросами попробовать снавигироваться на about:blank или ya.ru чтобы сбросить эффекты html anchors, html5 history и прочего

ты вообще уверен, что твой код рефреша действительно вызывается?)))

stevejobs ★★★☆☆ ()
Ответ на: комментарий от stevejobs

еще можно между запросами попробовать снавигироваться на about:blank

Пробовал.

ты вообще уверен, что твой код рефреша действительно вызывается?)))

Да, я это глазами вижу.

kravzo ★★ ()

Это случайно не поделие от «Сбертеха»?

Да, рукожопость 23-х летних задротов-быдлокодеров и при этом жуткие понты «Сбертеха» просто притча во языцах.

Даже карточку нельзя закрыть в любом отделении «Сбербанка».

Bioreactor ★★★★★ ()
Ответ на: комментарий от stevejobs

Почему в GWT/GXT никаких багов нет при работе в «Хроме»?

Может все-таки

https://otrude.net/employers/25584

СберТех худшая компания в данной области.
Текучка среди грамотных программистов огромная.
Профессионалы уходят, остаются карьеристы, 
которые на пустом месте хотят хорошо зарабатывать.
И это в СберТехе получается.

PS. Выше пост еще больше доставляет.

 Опенспейс в полуподвальном помещении. Фактически отсутствие вентиляции. 
Порой кружится голова от недостатка кислорода. Плохие стулья. 
Ужасная кухня и туалеты. Один раз даже прорвало туалет и запах мочи нюхали
 всем багетом.
Bioreactor ★★★★★ ()
Ответ на: комментарий от Bioreactor

Потому что Сбербанк - это не одна компания, а куча. Нельзя было закрыть карточку еще задолго до появления Сбертеха, и нельзя будет, скорей всего, никогда

stevejobs ★★★☆☆ ()
Ответ на: комментарий от stevejobs

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

Вроде, корректно отражаются последние операции по карте, попробую на них увязаться. Всем отписавшимся - два раза ку.

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

kravzo ★★ ()
Ответ на: комментарий от kravzo

у них наверняка фронт и бэк отвязаны друг от друга. Это разные сервера, общение асинхронное. Когда бэк пригонит на фронт новые циферки через какую-нибудь Apache Kafka, так циферки и поменяются. Соответственно, чем выше загрузка (например, прайм-тайм 12 часов дня пятницы, когда все совершают сделки и проверяют статус счета), тем больше вероятность, что новые цифры приедут скорей позже, чем раньше. То есть там привязка даже не к одной сессии (браузер), а даже к нескольким уровням кэширования и сессий на разных частях архитектуры. Селениум никто не предполагал как средство общения с сайтом, и для мимо-проходил-клиента-из-интернета суммарный статус в виде запроса API получить наверняка тупо невозможно. Это голимое ПРЕДПОЛОЖЕНИЕ (несмотря на то, что я там работал и писал какой-то бэк, лол)

stevejobs ★★★☆☆ ()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

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

P.S.: С пополнением кредитки — ваще мрак, выполняется в течение суток, а отображает транзакцию временем перевода.

kravzo ★★ ()
Последнее исправление: kravzo (всего исправлений: 2)
Ответ на: комментарий от kravzo

Например потому, что изменение истории можно показать мгновенно (все данные для того чтобы нарисовать пункт в списке истории есть на момент нажатия кнопки в UI), а чтобы получить результирующий баланс - нужно сделать запрос к ядру системы, чтобы оно что-то там посчитало. Нельзя так просто что-то нарисовать в UI новый баланс, вдруг оно не спишется (когда там транзакция физически фиксируется, через сутки?), а ты по неправильному балансу примешь какие-то финансовые решения и потом засудишь Сбер. Можно было бы сделать два поля: точный баланс и возможный баланс, но среднестатистический тупой человек от такого количества полей запутается, сойдет с ума и умрет от голода

stevejobs ★★★☆☆ ()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Вдруг, кому пригодится, отпишусь по результатам

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

Итого по остатку можно заключить, что единственный метод мониторить состояние счетов в риалтайме — постоянное обновление сессии. На тестах за 5-6 часов перелогина раз в 15 секунд — система никак не смутилась подобным поведением, думаю и на более долгом промежутке ей будет пофигу (было предположение, что система видит, что логины с одного места и поэтому не агрится, но я не верю, думаю, ей просто пофиг). Единственное лютое неудобство — полторы тысячи СМСок о том, что кто-то зашел в мой банк.

kravzo ★★ ()
Последнее исправление: kravzo (всего исправлений: 1)