Viv*_*san 5 python selenium attributes properties web-scraping
获取text和innerHTML使用硒之间有什么区别?即使我们在特定元素下有文本,执行时我们也会.text得到空值。但是做的.get_attribute("innerHTML")很好。
有人可以指出两者之间的区别吗?什么时候应该在上面使用'.get_attribute(“ innerHTML”)' .text?
Deb*_*anB 11
首先,text是一个属性,而 asinnerHTML是一个属性。从根本上来说,属性和属性之间存在一些差异。
get_attribute(innerHTML)获取innerHTML元素的属性。
此方法将首先尝试返回具有给定名称的属性的值。attribute如果具有该名称的属性不存在,则返回具有相同名称的值。如果没有\xe2\x80\x99sattribute具有该名称,None则返回。
被视为真实的值(即 equalstrue或false)以布尔值形式返回。所有其他非None值都作为字符串返回。对于不存在的属性或特性,None返回。
论据:
\ninnerHTML - Name of the attribute/property to retrieve.\nRun Code Online (Sandbox Code Playgroud)\n例子:
\n# Extract the text of an element.\nmy_text = target_element.get_attribute("innerHTML")\nRun Code Online (Sandbox Code Playgroud)\ntext获取元素的文本。
\n定义:
\ndef text(self):\n """The text of the element."""\n return self._execute(Command.GET_ELEMENT_TEXT)[\'value\']\nRun Code Online (Sandbox Code Playgroud)\n例子:
\n# Extract the text of an element.\nmy_text = target_element.text\nRun Code Online (Sandbox Code Playgroud)\n听起来还是很相似吗?参见下文...
\n当浏览器加载页面时,它会解析HTML 并从中生成 DOM 对象。对于元素节点,大多数标准 HTML 属性会自动成为 DOM 对象的属性。
\n例如,如果标签是:
\n<body id="page">\nRun Code Online (Sandbox Code Playgroud)\n那么 DOM 对象就有body.id="page".
\n\n注意:属性-属性映射不是一对一的!
\n
在 HTML 中,标签可能具有属性。当浏览器解析 HTML 来为标签创建 DOM 对象时,它会识别标准属性并从中创建 DOM 属性。
\n因此,当元素具有 id 或其他标准属性时,就会创建相应的属性。但如果属性是非标准的,则不会\xe2\x80\x99 发生。
\n\n\n注意:一个元素的标准属性对于另一个元素可能是未知的。例如,
\ntype是标签的标准属性<input>,但不是<body>标签的标准属性。标准属性在相应元素类的规范中进行了描述。
因此,如果一个属性是非标准的,则它不会有 DOM 属性。在这种情况下,可以使用以下方法访问所有属性:
\nelem.hasAttribute(name): 检查是否存在。elem.getAttribute(name): 获取值。elem.setAttribute(name, value): 设置值。elem.removeAttribute(name): 删除该属性。读取非标准属性的示例:
\n<body something="non-standard">\n <script>\n alert(document.body.getAttribute(\'something\')); // non-standard\n </script>\n</body>\nRun Code Online (Sandbox Code Playgroud)\n当标准属性更改时,相应的属性会自动更新,并且(有一些例外)反之亦然。但也有一些例外,例如input.value仅从attribute-> 同步到property,但不同步回来。这个功能实际上是派上用场的,因为用户可能会修改值,然后在修改之后,如果我们想从 HTML 中恢复“原始”值,则属性中的\xe2\x80\x99s。
根据Python中的属性和属性,当我们用类似的东西引用对象的属性时someObject.someAttr,Python使用几种特殊的方法来获取someAttr对象的属性。在最简单的情况下,属性只是实例变量。
从更广阔的角度来看:
\nsomeObj.name。__dict__实例变量是对象内部的一项。someObj.name,默认行为实际上是someObj.__dict__[\'name\']在 Python 中,我们可以使用内置函数或装饰器将getter, setter(和) 函数与属性名称绑定。当我们这样做时,对属性的每个引用都具有直接访问实例变量的语法,但它调用给定的方法函数。deleterproperty()@property
例如,<div><span>Example Text</span></div>。
.get_attribute("innerHTML")为您提供当前元素内的实际 HTML。所以theDivElement.get_attribute("innerHTML")返回“ <span>Example Text</span>”。
.text仅提供文本,不包括 HTML 节点。所以theDivElement.text返回“ Example Text”。
请注意,算法.text取决于每个浏览器的网络驱动程序。在某些情况下,例如element is hide,当您使用不同的网络驱动程序时,您可能会得到不同的文本。
.get_attribute("innerText")我通常从而不是获取文本.text,因此我可以处理所有情况。
| 归档时间: |
|
| 查看次数: |
3412 次 |
| 最近记录: |