2015-09-08 167 views
2

我正在開發一個個人項目來製作一個python腳本來登錄網站併爲我完成一些任務,並且我決定使用Selenium網絡驅動程序。目前我被卡在日誌中的一部分。Selenium webdriver - 元素可以找到,但不可見?

driver = webdriver.Chrome() 
driver.get("https://pucatrade.com") 

puca_username = "[email protected]" 
user_fieldID = "login" 

user_fieldelement = driver.find_element_by_id(user_fieldID) 
user_fieldelement.send_keys(puca_username) 

但是,它給了我上的send_keys調用。我知道find_element_by_id找到了這個元素,因爲我用​​進行了測試,並且它打印登錄信息。因此,如果find_element_by_id工作可以找到元素,send_keys怎麼辦?

回答

4

還有多輸入有id="login"。你有興趣在位於登錄表單上非常正確的一個是內部的divid="home-login"

form = driver.find_element_by_id("home-login") 

# login 
user_fieldelement = form.find_element_by_id(user_fieldID) 
user_fieldelement.send_keys(puca_username) 

# password 
passwd_fieldelement = form.find_element_by_id(passwd_fieldID) 
user_fieldelement.send_keys(puca_password) 
+0

謝謝,解決了它。代碼中還有一個更早的代碼,其顯示設置爲無。因此,爲了檢查我的理解,find_element_by_id能夠找到第一個「」id =「login」,因爲它存在於代碼中,但由於它的顯示設置爲none並且不能與之交互,所以send_keys正在給我那個異常 –

+0

@JasonWoo,很高興它解決了。 – alecxe

-1

我仍然不知道爲什麼有些網站有相同的名稱和ID衆多領域......但是因爲我只對可見的感興趣,所以我做了這個小功能來獲得正確的領域。

def find_visible_element_by_name(name): 
     # Websites, for some reason, has many fields with the sama name and ID! This gets the first one that is visible. 
     # http://stackoverflow.com/questions/32462116/selenium-webdriver-element-can-be-found-but-is-not-visible   
     fields = self.sel.find_elements_by_name(name) 
     for f in fields: 
      if f.is_displayed(): 
       return f 

     return None 

self.sel是硒驅動程序對象。

相關問題