在Selenium for Python中,如何获取元素的属性而不是其属性?

时间:2019-04-25 07:32:44

标签: python selenium selenium-webdriver getattribute getpropertyvalue

根据文档,get_attribute实际上返回属性而不是属性,除非该属性不存在,在这种情况下,它会退回到该属性。

get_property将始终返回该属性。

是否有一种始终获取属性的方法?我觉得奇怪的是,一个名为“ get_attribute”的函数会优先考虑属性值而不是属性值。

1 个答案:

答案 0 :(得分:2)

get_attribute(属性名称)

get_attribute(attribute_name)获取元素的给定attributeproperty

此方法将首先尝试返回具有给定名称的属性的值。如果不存在具有该名称的属性,它将返回具有相同名称的attribute的值。如果没有attribute的名称,则返回 None

被认为是真实的值,等于truefalse,以布尔值形式返回。所有其他非None值都作为字符串返回。对于不存在的属性,返回None

  • Args:

    attribute_name - Name of the attribute/property to retrieve.
    
  • 示例:

    # Check if the "active" CSS class is applied to an element.
    is_active = "active" in target_element.get_attribute("class")   
    

get_property(属性名称)

get_property(property_name)获取元素的给定属性。

  • Args:

    property_name - Name of the property to retrieve.
    
  • 示例:

    text_length = target_element.get_property("text_length")
    

听起来还是差不多吗?阅读下面的内容...


Attributes and properties

浏览器在加载页面时,会解析 HTML并从中生成DOM对象。对于元素节点,大多数标准HTML属性会自动成为DOM对象的属性。

例如,如果标记为:

<body id="page">

然后DOM对象具有body.id="page"

  

注意:属性-属性映射不是一对一的!


HTML attributes

在HTML中,标记可能具有属性。当浏览器解析HTML以创建标签的DOM对象时,它会识别标准属性并从中创建DOM属性。

因此,当元素具有id或其他标准属性时,将创建相应的属性。但是,如果该属性为非标准属性,则不会发生这种情况。

  

注意:一个元素的标准属性对于另一个元素可能是未知的。例如,type<input>标签的标准属性,而不是<body>标签的标准属性。规范中描述了相应元素类的标准属性。

因此,如果属性为非标准属性,则该属性将没有DOM属性。在这种情况下,可以使用以下方法访问所有属性:

  • elem.hasAttribute(name):检查是否存在。
  • elem.getAttribute(name):获取值。
  • elem.setAttribute(name, value):设置值。
  • elem.removeAttribute(name):删除属性。

读取非标准属性的示例:

<body something="non-standard">
  <script>
    alert(document.body.getAttribute('something')); // non-standard
  </script>
</body>

Property-attribute synchronization

当标准属性更改时,相应的属性会自动更新,并且(除某些例外)反之亦然。但是有一些例外,例如input.value仅从attribute->同步到property,而不同步。该功能实际上很方便,因为用户可以修改值,然后在该值之后,如果我们想从HTML中恢复“原始”值,则该值位于属性中。