Python Selenium webdriver-元素可以找到但不可见?

Python Selenium webdriver-元素可以找到但不可见?,python,selenium,selenium-webdriver,webdriver,Python,Selenium,Selenium Webdriver,Webdriver,我正在做一个个人项目,制作一个python脚本来登录到一个站点并为我完成一些任务,我决定使用Selenium web驱动程序。目前我被困在登录部分 driver = webdriver.Chrome() driver.get("https://pucatrade.com") puca_username = "example@username" user_fieldID = "login" user_fieldelement = driver.find_element_by_id(user_f

我正在做一个个人项目,制作一个python脚本来登录到一个站点并为我完成一些任务,我决定使用Selenium web驱动程序。目前我被困在登录部分

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

puca_username = "example@username"
user_fieldID = "login"

user_fieldelement = driver.find_element_by_id(user_fieldID)
user_fieldelement.send_keys(puca_username)
但是,它在send_keys调用中为我提供了
selenium.common.exceptions.ElementNotVisibleException:Message:element not visible
。我知道find_element_by_id会找到元素,因为我已经用
print user_fieldelement.get_属性('id'),
进行了测试,它会打印登录名。因此,如果按id查找元素可以找到元素,那么为什么发送键不能找到元素?

有多个输入具有
id=“login”
。您感兴趣的是登录表单最右侧的一个,它位于
div
中,带有
id=“home login”


我仍然不知道为什么一些网站有许多相同名称和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是Selenium驱动程序对象。

谢谢,解决了这个问题。代码前面还有一个,它的display设置为none。因此,为了检查我的理解,按id查找元素能够找到第一个
“id=”login“
,因为它存在于代码中,但由于它的显示设置为“无”,并且无法与之交互,所以send\u key给了我这个异常
    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