Как получить все xml / dom как текст под родительским веб-элементом, используя selenium / python? - PullRequest
0 голосов
/ 31 января 2019

У меня есть сценарий, который требует работы над объектом пользовательского интерфейса, отображаемым в виде сетки, но строки и столбцы являются отдельными веб-элементами, содержащимися в иерархии xml / dom, состоящей из нескольких путей xpath, которые можно анализировать с использованием общего шаблона.Все эти элементы содержат тексты, соответствующие типу столбца.Получение всех этих текстов по ссылкам webelement один за другим требует времени.Есть ли способ получить весь этот xml в виде текста (или хотя бы для одной строки в одном кадре), чтобы сэкономить время извлечения, анализируя весь встроенный xml.

Например, рассмотрим нижний упомянутый xml.Как я могу получить всю иерархию XML под <div[@class='table']> в качестве текста для анализа.

Это пример примера:

<div[@class='table']>
     <div[@class='rows']>
          <div[@class='row']>
               <div[@class='col']>
                   <div[@class='element']>some_text1</div[@class='element']>
                   <div[@class='element']>some_text2</div[@class='element']>
                   <div[@class='element']>some_text3</div[@class='element']>
                   ...
               </div[@class='col']>
          </div[@class='row']>
          <div[@class='row']>
               <div[@class='col']>
                   <div[@class='element']>some_text1</div[@class='element']>
                   <div[@class='element']>some_text2</div[@class='element']>
                   <div[@class='element']>some_text3</div[@class='element']>
                   ...
               </div[@class='col']>
          </div[@class='row']>
          <div[@class='row']>
               ...
          </div[@class='row']>
          <div[@class='row']>
               ...
          </div[@class='row']>
          <div[@class='row']>
               ...
          </div[@class='row']>
     </div[@class='rows']>
</div[@class='table']>

Мне нужно получить иерархию xml / dom / div, как упоминалосьниже:

    <div[@class='rows']>
          <div[@class='row']>
               <div[@class='col']>
                   <div[@class='element']>some_text1</div[@class='element']>
                   <div[@class='element']>some_text2</div[@class='element']>
                   <div[@class='element']>some_text3</div[@class='element']>
                   ...
               </div[@class='col']>
          </div[@class='row']>
          <div[@class='row']>
               <div[@class='col']>
                   <div[@class='element']>some_text1</div[@class='element']>
                   <div[@class='element']>some_text2</div[@class='element']>
                   <div[@class='element']>some_text3</div[@class='element']>
                   ...
               </div[@class='col']>
          </div[@class='row']>
          <div[@class='row']>
               ...
          </div[@class='row']>
          <div[@class='row']>
               ...
          </div[@class='row']>
          <div[@class='row']>
               ...
          </div[@class='row']>
     </div[@class='rows']>

за один раз.

Ответы [ 2 ]

0 голосов
/ 31 января 2019
element = driver.find_element_by_xpath("//div[@class='table']").get_attribute('outerHTML')

Атрибут outerHTML вернет вам сам элемент и все его дочерние узлы - поскольку они присутствуют в DOM.
Я бы рекомендовал против аналогичного innerHTML какесли у целевого элемента есть текстовый подузел, вы получите его, но результатом будет неправильный xml.

0 голосов
/ 31 января 2019

Пожалуйста, попробуйте это:

 WebElement element = driver.find_element_by_xpath("//div[@class='table']");
 String elementText = element.text;

В строке "elementText" вы получите все тексты, присутствующие в иерархии таблиц.

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