在硒中獲取text
和innerHTML
的區別是什麼?即使我們在特定元素下面有文本,當我們執行.text
時,我們會得到空值。但是做.get_attribute("innerHTML")
工作正常。selenium中的文本和InnerHTML之間的區別
有人能指出兩者之間的區別嗎?當有人在.text
之上使用'.get_attribute(「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