selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with
<p>Currently working to use Python to login with Twitter.</p>

<p>Twitter's login page is <a href="https://twitter.com/login" rel="nofollow">here</a>. The source code where the Username and Password input fields are:</p>

<pre><code>&lt;div class="LoginForm-input LoginForm-username"&gt;
&lt;input
  type="text"
  class="text-input email-input js-signin-email"
  name="session[username_or_email]"
  autocomplete="username"
  placeholder="Phone, email or username"
/&gt;
&lt;/div&gt;

&lt;div class="LoginForm-input LoginForm-password"&gt;
&lt;input type="password" class="text-input" name="session[password]" 
placeholder="Password" autocomplete="current-password"&gt;
&lt;/div&gt;
</code></pre>

<p>So when I write my code in Python utilizing the Selenium module:</p>

<pre><code># -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Firefox()
driver.get("https://twitter.com/login")
elem = driver.find_element_by_name("session[username_or_email]")
elem.clear()
elem.send_keys(username)
elem = driver.find_element_by_name("session[password]")
elem.clear()
elem.send_keys(password)
elem.send_keys(Keys.RETURN)
sleep(delay)
</code></pre>

<p>The error that is returned:</p>

<blockquote>
  <p>selenium.common.exceptions.ElementNotVisibleException: Message: Element 
      is not currently visible and so may not be
      interacted with</p>
</blockquote>

<p>Any help? Thanks! I have read of the responses of other similar questions, but have not helped much.</p>

<p><strong>Edit:</strong></p>

<p>Full error message:</p>

<pre><code>Traceback (most recent call last):
  File "main.py", line 154, in &lt;module&gt;
    main()
  File "main.py", line 143, in main
    twitterBruteforce(username, wordlist, delay)
  File "src/twitterLib.py", line 27, in twitterBruteforce
    elem.clear()
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 88, in clear
    self._execute(Command.CLEAR_ELEMENT)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webelement.py", line 457, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 233, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with
Stacktrace:
    at fxdriver.preconditions.visible (file:///tmp/tmpurkUhr/extensions/fxdriver@googlecode.com/components/command-processor.js:10092)
    at DelayedCommand.prototype.checkPreconditions_ (file:///tmp/tmpurkUhr/extensions/fxdriver@googlecode.com/components/command-processor.js:12644)
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmpurkUhr/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmpurkUhr/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at DelayedCommand.prototype.execute/&lt; (file:///tmp/tmpurkUhr/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
</code></pre>

<p>You should try using <code>WebDriverWait</code> to wait until element visible before interaction to the element as below :-</p>

<pre><code>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

wait = WebDriverWait(driver, 10)

user = wait.until(EC.visibility_of_element_located((By.NAME, "session[username_or_email]")))
user.clear()
user.send_keys(username)

pass = wait.until(EC.visibility_of_element_located((By.NAME, "session[password]")))
pass.clear()
pass.send_keys(password)
</code></pre>

<p><strong>Note</strong> :- instead of <code>send_keys(Keys.RETURN)</code> try using <code>click()</code> to the login button element as <code>login_button_element.click()</code> or try using <code>submit()</code> to the form element as <code>form_element.submit()</code> after locating these elements.</p>

python selenium