selenium中的文本和InnerHTML之间的区别
在硒中获取text
和innerHTML
的区别是什么?即使我们在特定元素下面有文本,当我们执行.text
时,我们会得到空值。但是做.get_attribute("innerHTML")
工作正常。selenium中的文本和InnerHTML之间的区别
有人能指出两者之间的区别吗?当有人在.text
之上使用'.get_attribute(“innerHTML”)'?
例如,<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
取决于每个浏览器的webdriver。在某些情况下,如元素被隐藏,当您使用不同的webdriver时,您可能会得到不同的文本。
我通常从.get_attribute("innerText")
获得文本而不是.text
,所以我可以处理所有的情况。
.text将检索视图端口中不存在的文本的空字符串,因此您可以将对象拖入视口并尝试.text它应该检索值。
相反的innerHTML可以得到值甚至它存在送出侧我刚刚选择的CSS选择和下面的代码使用的视图端口
:
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.costco.com/Weatherproof%C2%AE-Men's-Ultra-Tech-Jacket.product.100106552.html")
print driver.find_element_by_css_selector(".product-h1-container.visible-xl-block>h1").text
和它打印:
Weatherproof® Men's Ultra Tech Jacket
问题是h1[itemprop='name']
选择器上的铬或Firefox正在返回2点匹配的节点而.product-h1-container.visible-xl-block>h1
仅返回一个匹配节点所以它prining的期望是什么
为了证明我的观点运行下面的代码:
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("http://www.costco.com/Weatherproof%C2%AE-Men's-Ultra-Tech-Jacket.product.100106552.html")
x= driver.find_elements_by_css_selector("h1[itemprop='name'] ")
for i in x:
print "This is line " , i.text
它将打印
This is line
This is line Weatherproof® Men's Ultra Tech Jacket
因为select_element_by_css_selector与选择匹配选择的第一要素,并且不不包含任何文字,因此不会打印。希望您现在了解
多数民众赞成真是......但不找上面的选择和这个'driver.find_element_by_cs之间的区别s_selector(“h1 [itemprop ='name']”)。t ext' ...都选择相同的元素吧?....为什么在'.text'的情况下工作 –
您的选择器正在返回2个匹配节点一个不包含文本&第二个包含它的文本,而我的只有一个包含文本,所以它打印出来 – thebadguy
感谢您的明确解释!我们是否真的在页面中有两个元素......就像一个可见的和一个不可见的......当我们检查元素无法捕捉它......是对浏览器做些什么......或者再次错过任何微不足道的东西? –
“innerHTML”将返回此元素的内部HTML,其中包含其中的所有HTML标记,包括文本和标记,如“
这是演示
”,而.text将仅检索所有文本内容它的后代没有任何HTML tags.example:“This is demo” – thebadguy我可以得到这一点......但有时......当你做下面的'driver.find_element_by_css_selector(“p”).text'会产生没有。但是做driver.find_element_by_css_selector(“p”)。get_attribute(“innerHTML”)会导致提取'This is demo' ....为什么是这种行为? –
问题可能与您的选择器...当您使用的是driver.find_element_by_css_selector(“p”).text ....如果您可以共享您正在尝试的网页的网址..我可以用更好的方式解释事情 – thebadguy