【问题标题】:In Selenium for Python, how can I get an element's attribute rather than its property?在 Selenium for Python 中,如何获取元素的属性而不是其属性?
【发布时间】:2019-04-25 07:32:44
【问题描述】:

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

get_property 将始终返回该属性。

有没有办法始终获取属性?我发现一个名为“get_attribute”的函数会优先考虑属性值而不是属性值,这很奇怪。

【问题讨论】:

    标签: python selenium selenium-webdriver getattribute getpropertyvalue


    【解决方案1】:

    get_attribute(attribute_name)

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

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

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

    • 参数:

      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(property_name)

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

    • 参数:

      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&lt;input&gt; 标签的标准属性,但不是 &lt;body&gt; 标签的标准属性。标准属性在相应元素类的规范中进行了描述。

    所以,如果一个属性是非标准的,就不会有它的 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中恢复“原始”值,它就在属性中。

    【讨论】:

    • 感谢您的详细回答,但我不确定这是否真的回答了这个问题?您在底部的代码示例是 JavaScript,但问题是关于 Selenium for Python。我已经知道属性和属性之间的区别以及同步的工作原理;我的问题是关于如何在 Selenium for Python 中检索属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2021-02-12
    相关资源
    最近更新 更多