DOM не обновляется с помощью Selenium (IE, Chrome и VBA) - PullRequest
1 голос
/ 26 марта 2019

Я использую Selenium Basic для сбора данных с веб-сайта и сохранения их в базе данных.Страница, которую я очищаю, является динамичной и загружает больше информации при прокрутке.Я смог решить большую часть этого, используя неявные / явные ожидания и т. Д.

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

Когда я собираю эти новые данные, элементы не существуют, хотя я смог получить для них идентификаторы.Когда я смотрю на DOM в браузере и на странице источника, все это есть, поэтому я не верю, что проблема заключается в том, чтобы позволить браузеру загрузиться.

Я пытался использовать методы ожидания (неявные / явные) ... Я даже вставил жесткие 60 секундные ожидания в рамках этой процедуры.Независимо от того, что я делаю, подпрограмма взрывается после первых 10 строк, потому что она не может найти элементы данных, найденных после прокрутки.Я также пробовал использовать Chrome.

К сожалению, веб-сайт должен быть закрытым, поэтому я не могу предоставить полный код.Возникающая проблема возникает здесь:

driver.FindElementByXPath("//*[contains(text(),'" & DBA!ParseID & "')]").Click

Я получаю сообщение об ошибке: «Элемент не найден для XPath (» // * [содержит (text (), 'ID12345 "')]

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

То, что я должен получить, скажем, 20 идентификаторов, которые могут создать 20нажимает на всплывающие окна javascript, чтобы получить больше информации. Однако я получаю 20 идентификаторов, но могу нажать только первые 10, хотя я загрузил всю страницу.

1 Ответ

0 голосов
/ 27 марта 2019

Эта проблема не была решена так, как я первоначально ожидал, но я выполнил то, что мне нужно, другим и более эффективным способом.

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

То, что я сделал, чтобы выполнить то, что мне было нужно, это перебрать реальный класс N раз и вытащить нужные мне элементы внутри классов. Вместо того, чтобы использовать вышеуказанный идентификатор в качестве уникального идентификатора, я использовал количество веб-элементов класса в качестве идентификатора. Это сработало на 90% меньше кода.

Спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...