python selenium元素不可见异常

时间:2017-07-11 19:41:39

标签: python selenium

import webbrowser
from selenium import webdriver

browser = webdriver.Chrome()
browser.maximize_window()
browser.get('https://www.suntrust.com/')
browser.implicitly_wait(15)
elem = browser.find_element_by_css_selector('input#sign-on-3A69E29D-79E0-
                                           403E-9352-5261239ADD89-user')
elem.click().send_keys('your-username')

元素不可见异常错误消息:

enter image description here

我正在尝试自动登录登录/密码字段,但我不断收到此错误消息。

我尝试了各种“find_element_by”定位器,但推荐使用这个定位器,所以我认为css选择器不是问题所在。我究竟做错了什么?

2 个答案:

答案 0 :(得分:0)

以下是您的问题的答案:

您构建的css_selector不是唯一的,并且与HTML DOM上的2个元素匹配。第一场比赛是不可见的,而第二场比赛是我们期望的元素。 Selenium试图点击第一个元素。因此错误。以下是您自己的代码,其中包含修改后的css_selector,该代码在我的结尾处运行良好:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
browser = webdriver.Chrome(chrome_options=options, executable_path="C:\\Utility\\BrowserDrivers\\chromedriver.exe")
browser.get('https://www.suntrust.com/')
browser.implicitly_wait(15)
elem = browser.find_element_by_css_selector('section[role="main"] input[id="sign-on-3A69E29D-79E0-403E-9352-5261239ADD89-user"]')
elem.send_keys('your-username')

如果这回答你的问题,请告诉我。

答案 1 :(得分:0)

通常是因为dom不会加载而Selenium脚本试图找到该元素。确保此元素不在iframe中。使用selenium explicit wait直到元素加载,然后对该按钮执行操作。你必须在python中做这样的事情。下面的代码只是创建一个等待对象,然后等待元素加载并执行下一步

from selenium.webdriver.support.ui import WebDriverWait


    myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
    print "Page is ready!"
except TimeoutException:
    print "Loading took too much time!"