python – Selenium – ElementNotVisibleException

我在selenium的这个ElementNotVisibleException问题上看到了很多问题/答案.

我到目前为止所做的最好的代码如下:

from selenium.webdriver.support.ui import WebDriverWait
from selenium                      import webdriver
from selenium.webdriver.common.by  import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support    import expected_conditions as EC
url      = "http://www.cfnews.net/user/login"
driver.get(url)
print "Got url."
wait = WebDriverWait(driver, 10)
login_form = wait.until(EC.invisibility_of_element_located((By.ID, "user-login")), "pbm")
print "Element located."
displayed = login_form.is_displayed()
print "login_form.is_displayed() = ", displayed
login_form.send_keys("a")

它给出了以下输出:

Got url.
Element located.
login_form.is_displayed() =  False
---------------------------------------------------------------------------
ElementNotVisibleException                Traceback (most recent call last)
<ipython-input-110-d45e06b37320> in <module>()
     12 displayed = login_form.is_displayed()
     13 print "login_form.is_displayed() = ", displayed
---> 14 login_form.send_keys("a")

/Users/romain/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.pyc in send_keys(self, *value)
    345                 value = self._upload(local_file)
    346 
--> 347         self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': keys_to_typing(value)})
    348 
    349     # RenderedWebElement Items

/Users/romain/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.pyc in _execute(self, command, params)
    492             params = {}
    493         params['id'] = self._id
--> 494         return self._parent.execute(command, params)
    495 
    496     def find_element(self, by=By.ID, value=None):

/Users/romain/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.pyc in execute(self, driver_command, params)
    234         response = self.command_executor.execute(driver_command, params)
    235         if response:
--> 236             self.error_handler.check_response(response)
    237             response['value'] = self._unwrap_value(
    238                 response.get('value', None))

/Users/romain/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.pyc in check_response(self, response)
    190         elif exception_class == UnexpectedAlertPresentException and 'alert' in value:
    191             raise exception_class(message, screen, stacktrace, value['alert'].get('text'))
--> 192         raise exception_class(message, screen, stacktrace)
    193 
    194     def _value_or_default(self, obj, key, default):

ElementNotVisibleException: Message: element not visible
  (Session info: chrome=54.0.2840.98)
  (Driver info: chromedriver=2.25.426935 (820a95b0b81d33e42712f9198c215f703412e1a1),platform=Mac OS X 10.12.0 x86_64)

因此,页面被下载,html由驱动程序获取,但是不可能发送任何密钥.
这里也有答案:
Selenium Element not visible exception

建议使用ActionChain,但我尝试没有成功:(

如果我做 :

driver.page_source

我得到了HTML:

u'<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://opengraphprotocol.org/schema/"><head>\n        \n                                                                                    \n<title>Ouverture de session / Utilisateur - l\'actualit\xe9 du capital investissement : transactions LBO, M&amp;A, Venture France - Corporate Finance et Private Equity</title>\n<meta name="description" content="CFNEWS est le premier site \xe0 proposer actualit\xe9s et r\xe9f\xe9rentiels du corporate finance en France sur les...etc...

最佳答案 试试这个并成功!

from selenium.webdriver.support.ui import WebDriverWait
from selenium                      import webdriver
from selenium.webdriver.common.by  import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support    import expected_conditions as EC

driver = webdriver.Firefox()
url      = "http://www.cfnews.net/user/login"
driver.get(url)

wait = WebDriverWait(driver, 10)
login_form = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input#nom-user")))

login_form.send_keys("a")
点赞