2017-03-27 52 views
3

我正在努力創建一個while -loop,只要網站上存在特定的元素,它就會運行。我目前所擁有的絕不是我所引以爲傲的解決方案,但它的確有效。我不過非常感謝如何改變以下一些建議:如何使一個while循環運行,只要一個元素存在於頁面中使用python中的selenium?

def spider(): 
    url = 'https://stackoverflow.com/questions/ask' 
    driver.get() 

    while True: 
     try: 
      unique_element = driver.find_element_by_class_name("uniqueclass") 

      do_something() 

     except NoSuchElementException: 
      print_data_to_file(entries) 
      break 

    do_something_else() 

正如你所看到的,我內while -loop做的第一件事是檢查中的獨特元素,其僅出現在頁面包含我感興趣的數據。因此,當我到達沒有這些信息的頁面時,我會得到NoSuchElementException並中斷。

如何在不必製作while True的情況下實現上述目標?

回答

4

driver.find_elements不會拋出任何錯誤。如果返回列表爲空則表示沒有任何更多的元素

def spider(): 
    url = 'https://stackoverflow.com/questions/ask' 
    driver.get() 

    while len(driver.find_elements_by_class_name("uniqueclass")) > 0: 
     do_something() 

do_something_else() 

你也可以使用顯式的等待與預期的情況staleness_of,但是你將無法執行do_something()和它用於短的等待期。

+1

也可以只是'while driver.find_elements_by_class_name(「uniqueclass」):'。同樣取決於'do_something()'裏面發生的事情,''一點點'睡覺'可能是好的。 –

+0

我很感謝你的回答 - 我會試一試! – vham

+1

這很好,非常感謝! – vham

相關問題