Я работаю над проектом, который анализирует DOM страницы на основе Angular и выводит классы объектной модели страницы, которые можно использовать с Selenium, используя следующие шаги (используя драйвер Selenium Chrome):
- Получить необработанный текст HTML [Driver.FindElementByTagName ("body"). GetAttribute ("outerHTML")] *
- Создать объект IHTMLDocument2
- Записать текст в объект IHTMLDocument2 [doc.Write (text)]
- Рекурсивно обходить DOM, начиная с корневого элемента, передавая корневой элемент пользовательской функции PopulateChildren (IHTMLElement parent)
- Внутри PopulateChildren, перебирайте parent.children, передавая каждый элемент PopulateChildren..
Моя проблема заключается в том, что хотя я вижу узел <APP>
на вкладке "Элементы" в инструментах разработчика в Chrome и вижу, что он является потомком <body>
и сам по себе имеетдети, когда это родительский элемент в моем коде, у него нет детей.Вместо этого все его дочерние элементы свисают с элемента <body>
.
В Chrome я вижу следующее дерево DOM (исключая все теги скрипта):
body
└app
├main-layout-header
│ └div
├div
└div
Когда я иду по DOM в коде, я получаю это:
body
├app
├main-layout-header
├div
├div
└div
Элементы есть, просто не в нужном месте.Кажется, что MSHTML не знает, что делать с какими-то нестандартными элементами HTML.Они отображаются как базовый тип HTMLElementUnknownClass.
Есть идеи, почему он не может разместить их в правильном месте?Я, наверное, могу обойти это, но мне бы очень хотелось понять, что происходит под одеялом.