Selenium:用find_element_by_name输入用户名,如何找到Name?

时间:2017-06-23 15:27:35

标签: python-3.x selenium-webdriver

我使用related question

中的一些代码

username = driver.find_element_by_name("username")

username.send_keys("username")

我查看了登录页面的源代码,并看到: HTML snippet

然而,我两者都有错误     username = driver.find_element_by_name(" Email") 和     username = driver.find_element_by_name(" ember442")

错误说:

  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/anaconda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 385, in find_element_by_name
    return self.find_element(by=By.NAME, value=name)
  File "/anaconda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 791, in find_element
    'value': value})['value']
  File "/anaconda/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 256, in execute
    self.error_handler.check_response(response)
  File "/anaconda/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"name","selector":"Email"}

我在这里做错了什么?我唯一的另一个想法是使用其他命令之一来定位元素(find_element_by_id, find_element_by_name, find_element_by_xpath, find_element_by_link_text, find_element_by_partial_link_text, find_element_by_tag_name, find_element_by_class_name, find_element_by_css_selector)但那些似乎也不起作用。

3 个答案:

答案 0 :(得分:1)

这是因为这些都不是元素名称。你应该使用:

username = driver.find_element_by_id("ember442")

答案 1 :(得分:0)

以下是您的问题的答案:

对于电子邮件,请尝试xpath为//input[@id='ember442']

username = driver.find_element_by_xpath("//input[@id='ember442']")
username.send_keys("username")

对于密码,请尝试xpath为//input[@id='ember443']

username = driver.find_element_by_xpath("//input[@id='ember443']")
username.send_keys("username")

如果这回答你的问题,请告诉我。

答案 2 :(得分:0)

知道了!我最终找到了一个related question(虽然使用的是Java)和答案中的一段代码:driver.findElement(By.xpath("//input[@name='name']"))并将其修改为:username = driver.find_element_by_xpath("//input[@placeholder='Email']"‌​) 我想知道如何通过引用id名称(find_element_by_id)来做到这一点,但这是一个特定于任务的问题,因此它现在可以使用了!

TLDR;我必须在find_element_by_xpath中指定占位符名称。