如何使用Selenium / python将所有xml / dom作为文本在父Web元素下获取?

时间:2019-01-31 05:44:38

标签: python python-3.x selenium selenium-webdriver

我有一种情况,要求处理显示为网格的UI对象,但行和列是xml / dom层次结构中包含的单独的Web元素,该层次结构由多个xpath组成,可以使用通用模式进行解析。 所有这些元素都包含与列类型相对应的文本。 通过webelement引用所有这些文本需要一个时间。 有没有一种方法可以将所有这些xml文本(或单笔至少一行)获取为文本,以通过内联解析整个xml来节省提取时间。

例如,考虑底部提到的xml。如何获得<div[@class='table']>下的所有xml层次结构作为要解析的文本。

这是示例示例:

<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 :(得分:5)

element = driver.find_element_by_xpath("//div[@class='table']").get_attribute('outerHTML')

属性outerHTML will return you the element itself and all its child nodes-出现在DOM中。
我建议不要针对类似的innerHTML,好像目标元素有一个文本子节点,您会收到它,但是结果将不是正确的xml。

答案 1 :(得分:0)

请尝试以下操作:

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

在字符串“ elementText”中,您将获取表层次结构中存在的全部文本。