2017-07-30 34 views
-1

我怎麼知道,有一個文本或沒有。我用這個代碼:文本是否存在(Selenium,Python)

pricelist = driver.find_elements_by_xpath(".//*[@id='scroll']/div[2]/div/div[2]/div") 
if EC.text_to_be_present_in_element(By.XPATH(".//*[@id='scroll']/div[2]/div/div[2]/div[1]")): 
    price = pricelist[1].text 
elif EC.text_to_be_present_in_element(By.XPATH(".//*[@id='scroll']/div[2]/div/div[2]/div[2]")): 
    price = pricelist[2].text 
else: 
    price = pricelist[3].text 

問題:

TypeError: 'str' object is not callable

+0

您對預期條件的使用不正確。此EC比較定位符返回的元素中的文本與您作爲第二個參數提供的文本相匹配。 – Grasshopper

回答

1

您可以使用XPath查詢文本的長度的元素。見下面的代碼。

price = driver.find_element_by_xpath(".//*[@id='scroll']/div[2]/div/div[2]/div[string-length(text()) > 1]").text 

您可以更改文本長度的XPath像/div[string-length(text()) > 10]發現其中包含超過10個字符的元素。

+0

你應該改爲元素而不是複數元素。目前它會調用列表中的函數文本而不是webelement – Grasshopper

+0

@Grasshopper謝謝。 – Buaban

1

By.XPATH不是一種方法,而是簡單的字符串。正確的用法是

EC.text_to_be_present_in_element((By.XPATH, xpath_expression))) 

如果你想匹配的是包含文本元素,使用[text()]斷言:

".//*[@id='scroll']/div[2]/div/div[2]/div[text()]" 
+0

謝謝!如果兩個元素都有字符串會怎麼樣?一個字符串可以存儲超過10個符號。但地方是未知的 –

0

我用另一種方法:

pricelist = driver.find_elements_by_xpath(".//*[@id='scroll']/div[%d]/div/div[2]/div" %num) 
for prc in pricelist: 
    if len(prc.text) < 10 and len(prc.text) > 0: 
     price = prc.text 

這種方法足夠慢,但最可靠的

相關問題