【发布时间】:2019-04-25 07:32:44
【问题描述】:
根据文档,get_attribute 实际上返回的是属性而不是属性,除非属性不存在,在这种情况下它会回退到属性。
get_property 将始终返回该属性。
有没有办法始终获取属性?我发现一个名为“get_attribute”的函数会优先考虑属性值而不是属性值,这很奇怪。
【问题讨论】:
标签: python selenium selenium-webdriver getattribute getpropertyvalue
根据文档,get_attribute 实际上返回的是属性而不是属性,除非属性不存在,在这种情况下它会回退到属性。
get_property 将始终返回该属性。
有没有办法始终获取属性?我发现一个名为“get_attribute”的函数会优先考虑属性值而不是属性值,这很奇怪。
【问题讨论】:
标签: python selenium selenium-webdriver getattribute getpropertyvalue
get_attribute(attribute_name) 获取元素的给定attribute 或property。
此方法将首先尝试返回具有给定名称的属性的值。如果不存在具有该名称的属性,则返回具有相同名称的 attribute 的值。如果没有具有该名称的 attribute,则返回 None。
被认为是真实的值,即等于true 或false,将作为布尔值返回。所有其他非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) 获取元素的给定属性。
参数:
property_name - Name of the property to retrieve.
例子:
text_length = target_element.get_property("text_length")
听起来仍然相似?阅读下文...
当浏览器加载页面时,它解析 HTML 并从中生成 DOM 对象。对于元素节点,大多数标准 HTML 属性会自动成为 DOM 对象的属性。
例如,如果标签是:
<body id="page">
那么 DOM 对象有body.id="page"。
注意:属性-属性映射不是一对一的!
在 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>
当标准属性发生变化时,相应的属性会自动更新,并且(有一些例外)反之亦然。但也有例外情况,例如 input.value 仅从 attribute -> 同步到 property,但不同步。这个特性其实派上用场了,因为用户可以修改值,然后在它之后,如果我们想从HTML中恢复“原始”值,它就在属性中。
【讨论】: