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')
元素不可见异常错误消息:
我正在尝试自动登录登录/密码字段,但我不断收到此错误消息。
我尝试了各种“find_element_by”定位器,但推荐使用这个定位器,所以我认为css选择器不是问题所在。我究竟做错了什么?
答案 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!"