Skip to main content
 首页 » 编程设计

python之selenium.common.exceptions.ElementNotVisibleException : Message: Element is not currently visible and so may not be interacted with

2025年05月04日25lexus

目前正在努力使用 Python 登录 Twitter。

Twitter 的登录页面是 here .用户名和密码输入字段的源代码是:

<div class="LoginForm-input LoginForm-username"> 
<input 
  type="text" 
  class="text-input email-input js-signin-email" 
  name="session[username_or_email]" 
  autocomplete="username" 
  placeholder="Phone, email or username" 
/> 
</div> 
 
<div class="LoginForm-input LoginForm-password"> 
<input type="password" class="text-input" name="session[password]"  
placeholder="Password" autocomplete="current-password"> 
</div> 

因此,当我使用 Selenium 模块在 Python 中编写代码时:

# -*- 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) 

返回的错误:

selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with

有什么帮助吗?谢谢!我已经阅读了其他类似问题的回答,但没有太大帮助。

编辑:

完整错误信息:

Traceback (most recent call last): 
  File "main.py", line 154, in <module> 
    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/< (file:///tmp/tmpurkUhr/extensions/fxdriver@googlecode.com/components/command-processor.js:12608) 

请您参考如下方法:

您应该尝试使用 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 
 
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) 

注意:- 而不是 send_keys(Keys.RETURN) 尝试使用 click() 作为登录按钮元素作为 login_button_element .click() 或在找到这些元素后尝试使用 submit() 作为 form_element.submit() 到表单元素。