【问题标题】:selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted withselenium.common.exceptions.ElementNotVisibleException:消息:元素当前不可见,因此可能无法与之交互
【发布时间】:2016-09-04 18:39:50
【问题描述】:

目前正在努力使用 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:消息:元素 当前不可见,因此可能不可见 互动

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

编辑:

完整的错误信息:

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)

【问题讨论】:

  • 哪个元素不可见?显示完整的异常日志
  • 更新了我的帖子。谢谢:)
  • 不清楚..你能告诉我们这个异常发生在哪一行吗?此异常是否发生在elem.clear() 行?但是您对两个元素都使用相同的变量,为什么??
  • 'elem = driver.find_element_by_name("session[username_or_email]")'
  • 但是这一行只找到元素.. 在与元素交互期间可能会发生此异常,例如使用 .clear()send_keys()..

标签: python selenium


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    相关资源
    最近更新 更多