2017-07-30 3 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は、ロケータによって返された要素のテキストを、2番目の引数として指定したテキストと比較します。 – Grasshopper

答えて

1

あなたは要素のテキストの長さを確認するために、XPathを使用することができます。以下のコードを参照してください。

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

あなたは10の以上の文字が含まれている要素を見つけること/div[string-length(text()) > 10]のようなのxpathでテキストの長さを変更することができます。

+0

複数の要素の代わりに要素に変更する必要があります。現在、webelementの代わりにリストの関数テキストを呼び出します – Grasshopper

+0

@Grasshopperありがとうございます。 – Buaban

1

By.XPATHは単純な文字列ではありません。 、この方法は、十分に遅いです

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 

:私は別の方法を使用している

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

ありがとうございます!両方の要素に文字列がある場合はどうなりますか? 1つの文字列に10個以上のシンボルを格納できます。しかし、場所は不明です –

0

:正しい使用方法は[text()]述語を使用し、

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

テキストを含む要素を一致させたい場合は ですしかし、最もリダイアブルです

関連する問題