Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Selenium-登录引发ElementNotVisibleException_Python_Selenium_Selenium Webdriver - Fatal编程技术网

Python Selenium-登录引发ElementNotVisibleException

Python Selenium-登录引发ElementNotVisibleException,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我正在使用SeleniumWebDriver登录到一个站点。我尝试了多个不同的选择器,并尝试了隐式等待,但找不到元素 from selenium import webdriver from selenium.webdriver.common.by import By browser = webdriver.Firefox() url = "https://www.example.com" login_page = browser.get(url)

我正在使用SeleniumWebDriver登录到一个站点。我尝试了多个不同的选择器,并尝试了隐式等待,但找不到元素

    from selenium import webdriver
    from selenium.webdriver.common.by import By

    browser = webdriver.Firefox()
    url = "https://www.example.com"
    login_page = browser.get(url)

    username = browser.find_element_by_id("Email")
    # Also tried:
    # username = browser.find_element_by_xpath('//*[@id="Email"]')
    # username = browser.find_element_by_css_selector('#Email')
    username.send_keys("email")
这是html

<div class="form-group">
    <label for="Email">Email address</label>
    <div class="input-group" style="width: 100%">
        <input class="form-control email" data-val="true" data-val-length="Maximum length is 50" data-val-length-max="50" data-val-regex="Provided email address is not valid" data-val-regex-pattern="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$" data-val-required="Email is required" id="Email" name="Email" type="email" value=""><br>
        <span class="field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
    </div>
</div>

电子邮件地址

这是错误消息

Traceback (most recent call last):
  File "seleniumloginpi.py", line 12, in <module>
    email.send_keys('email')
  File "/Users/greg/anaconda/envs/trade/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 320, in send_keys
    self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': keys_to_typing(value)})
  File "/Users/greg/anaconda/envs/trade/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py", line 461, in _execute
    return self._parent.execute(command, params)
  File "/Users/greg/anaconda/envs/trade/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute
    self.error_handler.check_response(response)
  File "/Users/greg/anaconda/envs/trade/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, 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:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command-processor.js:10092)
    at DelayedCommand.prototype.checkPreconditions_ (file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command-processor.js:12644)
    at DelayedCommand.prototype.executeInternal_/h (file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)
    at DelayedCommand.prototype.executeInternal_ (file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)
    at DelayedCommand.prototype.execute/< (file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command-processor.js:12608)
回溯(最近一次呼叫最后一次):
文件“seleniumloginpi.py”,第12行,在
电子邮件。发送密钥(“电子邮件”)
文件“/Users/greg/anaconda/envs/trade/lib/python2.7/site packages/selenium/webdriver/remote/webelement.py”,第320行,在send_键中
self._execute(Command.SEND_KEYS_TO_元素,{'value':KEYS_TO_typing(value)})
文件“/Users/greg/anaconda/envs/trade/lib/python2.7/site packages/selenium/webdriver/remote/webelement.py”,第461行,在
返回self.\u parent.execute(命令,参数)
文件“/Users/greg/anaconda/envs/trade/lib/python2.7/site packages/selenium/webdriver/remote/webdriver.py”,执行中第236行
self.error\u handler.check\u响应(响应)
文件“/Users/greg/anaconda/envs/trade/lib/python2.7/site packages/selenium/webdriver/remote/errorhandler.py”,第192行,在check_响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.ElementNotVisibleException:消息:元素当前不可见,因此可能无法与之交互
堆栈跟踪:
在fxdriver.premissions.visible(file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command processor.js:10092)
在DelayedCommand.prototype.CheckPremissions\u(file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command processor.js:12644)
在DelayedCommand.prototype.executeInternal\uh处(file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command processor.js:12661)
在DelayedCommand.prototype.executeInternal\u(file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command processor.js:12666)
在DelayedCommand.prototype.execute/<(file:///var/folders/2h/3nnr94wx0f9g9bjcl0ks_g1w0000gn/T/tmpfAR5E7/extensions/fxdriver@googlecode.com/components/command processor.js:12608)

任何帮助都将不胜感激

实际上,您正在查找元素,
发送键出现问题,由于元素不可见,无法在电子邮件输入中设置值。但正如我在提供的HTML中看到的,电子邮件输入元素上不存在任何样式属性属性,这可能会使其不可见

可能有更多具有相同id的元素,并且您正在与其他元素交互,您应该尝试使用不同的定位器,如下所示:-

username = browser.find_element_by_css_selector('div.input-group input#Email.form-control.email')
username.send_keys("email") 
或者尝试查找Id为
Email
的所有元素,并对可见元素执行
send_keys()
,如下所示:

usernames = browser.find_elements_by_id('Email')

for username in usernames:
   if username.is_displayed():
        username.send_keys("email") 
        break

您确定只有一个元素id为email吗?还有一个元素id为“email”。使用css选择器无法解决此问题,但循环有效。谢谢@如果您尝试提供唯一的定位器,那么不带循环的gtownrower也可以工作,我认为这个
xpath
可能是唯一的
//label[text()='Email address']/following::input[@id='Email']
(.//input[@id='Email'])[2]
。。