2016-11-04 120 views
1

在硒中获取textinnerHTML的区别是什么?即使我们在特定元素下面有文本,当我们执行.text时,我们会得到空值。但是做.get_attribute("innerHTML")工作正常。selenium中的文本和InnerHTML之间的区别

有人能指出两者之间的区别吗?当有人在.text之上使用'.get_attribute(“innerHTML”)'?

+0

“innerHTML”将返回此元素的内部HTML,其中包含其中的所有HTML标记,包括文本和标记,如“

这是演示

”,而.text将仅检索所有文本内容它的后代没有任何HTML tags.example:“This is demo” – thebadguy

+0

我可以得到这一点......但有时......当你做下面的'driver.find_element_by_css_selector(“p”).text'会产生没有。但是做driver.find_element_by_css_selector(“p”)。get_attribute(“innerHTML”)会导致提取'This is demo' ....为什么是这种行为? –

+0

问题可能与您的选择器...当您使用的是driver.find_element_by_css_selector(“p”).text ....如果您可以共享您正在尝试的网页的网址..我可以用更好的方式解释事情 – thebadguy

回答

1

例如,<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,所以我可以处理所有的情况。

0

.text将检索视图端口中不存在的文本的空字符串,因此您可以将对象拖入视口并尝试.text它应该检索值。

相反的innerHTML可以得到值甚至它存在送出侧我刚刚选择的CSS选择和下面的代码使用的视图端口

0

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与选择匹配选择的第一要素,并且不不包含任何文字,因此不会打印。希望您现在了解

+0

多数民众赞成真是......但不找上面的选择和这个'driver.find_element_by_cs之间的区别s_selector(“h1 [itemprop ='name']”)。t ext' ...都选择相同的元素吧?....为什么在'.text'的情况下工作 –

+0

您的选择器正在返回2个匹配节点一个不包含文本&第二个包含它的文本,而我的只有一个包含文本,所以它打印出来 – thebadguy

+0

感谢您的明确解释!我们是否真的在页面中有两个元素......就像一个可见的和一个不可见的......当我们检查元素无法捕捉它......是对浏览器做些什么......或者再次错过任何微不足道的东西? –