2016-11-04 121 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

感謝您的明確解釋!我們是否真的在頁面中有兩個元素......就像一個可見的和一個不可見的......當我們檢查元素無法捕捉它......是對瀏覽器做些什麼......或者再次錯過任何微不足道的東西? –