2015-04-16 35 views
0

我希望能夠到達else語句,並且在元素未顯示時不會收到異常。Python selenium is_displayed方法

例如:

if driver.find_element_by_xpath("/html/body/main/div/article[2]/div[4]/header/div[2]/div/div[3]/a[4]").is_displayed(): 
      print("yeah found it") 
     else: 
      print("not found") 
+0

問題是什麼? – Saifur

+0

我想要去else語句,但是當元素沒有顯示時,我會得到一個異常,而不是打印(「找不到」) – user3671239

+0

什麼異常? – Saifur

回答

0

你不能叫is_displayed()或元素上的任何其他財產不存在。 is_displayed()只有在存在於DOM中但隱藏或顯示的元素時纔有效。即使到達代碼以檢查它是否顯示,您的程序仍然失敗。因此,可能的修復可能是使用某種嘗試捕捉,而不是從here

+0

這不是我在找什麼,我正在尋找一種方式,我可以繼續運行即使沒有找到我正在查找的元素,也不會收到異常。所以如果沒有找到元素跳轉到其他語句,看看有什麼可以運行 – user3671239

+0

我不知道我是否正確跟蹤你。如果找不到預期的元素,您將如何繼續運行測試? – Saifur

+1

沒關係,你的回答很好,我調整了你的代碼,現在它的工作很好,非常感謝你。 – user3671239

0

採取

from selenium.common.exceptions import NoSuchElementException 

found = False 
while not found: 
    try: 
     link = driver.find_element_by_xpath(linkAddress) 
     found = True 
    except NoSuchElementException: 
     time.sleep(2) 

示例代碼我碰到了同樣的問題,這個問答&塊是改變遊戲規則。我通過Saifur調整了給定的代碼也符合我的需求,我相信類似這樣的問題的請求:

elementlist = [] 
found = False 
while not found: 
    try: 
     element_ = browser.find_element_by_xpath("//*[@class='class' and (contains(text(),'Optional-text-contain'))]") 
     if element_.is_displayed(): 
      value = element_.find_element_by_css_selector("*") 
      elementlist.append(value.text) 
      print("Element: " + value.text) 
      found = True 
    except NoSuchElementException: 
     elementlist.append("N/A") 
     print("Element: N/A") 
     found = True 

該代碼查找的頁面內交替元素(有時存在,有時沒有)。如果存在,它會給出它的價值。如果不是 - 繼續正常,同時在列表中追加一個「NaN」風格的值,以便與稍後的DFing匹配軸

再次,Saifur在此問題上提供了巨大的幫助。謝謝user3691239提出這個問題,並提到它爲你工作後,一個小調整。