2015-09-08 134 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是硒驱动程序对象。

相关问题