Python 3.x Selenium:输入用户名并按名称查找元素,如何查找名称?
我正在使用一段来自Python 3.x Selenium:输入用户名并按名称查找元素,如何查找名称?,python-3.x,selenium-webdriver,Python 3.x,Selenium Webdriver,我正在使用一段来自 username=driver。通过名称(“用户名”)查找元素 username.发送密钥(“用户名”) 我查看了登录页面的源代码,发现: 然而,这两方面我都有错误 用户名=驱动程序。通过名称(“电子邮件”)查找元素 及 用户名=驱动程序。通过名称(“ember442”)查找元素 错误显示: Traceback (most recent call last): File "<stdin>", line 1, in <module> Fil
username=driver。通过名称(“用户名”)查找元素
username.发送密钥(“用户名”)
我查看了登录页面的源代码,发现:
然而,这两方面我都有错误
用户名=驱动程序。通过名称(“电子邮件”)查找元素
及
用户名=驱动程序。通过名称(“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"}
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/anaconda/lib/python3.6/site packages/selenium/webdriver/remote/webdriver.py”,第385行,按名称查找元素
返回self.find_元素(by=by.NAME,value=NAME)
文件“/anaconda/lib/python3.6/site packages/selenium/webdriver/remote/webdriver.py”,第791行,在find_元素中
'value':value})['value']
文件“/anaconda/lib/python3.6/site packages/selenium/webdriver/remote/webdriver.py”,执行中第256行
self.error\u handler.check\u响应(响应)
文件“/anaconda/lib/python3.6/site packages/selenium/webdriver/remote/errorhandler.py”,第194行,在check_响应中
引发异常类(消息、屏幕、堆栈跟踪)
selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{“方法”:“名称”,“选择器”:“电子邮件”}
我做错了什么?我唯一的其他想法是使用其他命令之一来定位元素(按元素id查找元素),
按名称查找元素,
通过xpath查找元素,
通过链接文本查找元素,
通过部分链接文本查找元素,
通过标记名称查找元素,
通过类名称查找元素,
通过_css _选择器)查找_元素_),但这些似乎也不起作用 这是因为这些都不是元素名。你应使用:
username = driver.find_element_by_id("ember442")
以下是你问题的答案:
对于电子邮件,请尝试xpath作为//输入[@id='ember442']
:
username = driver.find_element_by_xpath("//input[@id='ember442']")
username.send_keys("username")
username = driver.find_element_by_xpath("//input[@id='ember443']")
username.send_keys("username")
有关密码,请尝试xpath作为//输入[@id='ember443']
:
username = driver.find_element_by_xpath("//input[@id='ember442']")
username.send_keys("username")
username = driver.find_element_by_xpath("//input[@id='ember443']")
username.send_keys("username")
如果这能回答您的问题,请告诉我。明白了!最后,我在一个答案中找到了一个(尽管是使用Java的)和一段代码:driver.findelelement(By.xpath(“//input[@name='name'])
),并将其修改为:username=driver.find_element_By_xpath(//input[@placeholder='Email']))代码>
我很想知道如何通过引用id名称(find_element_by_id
)来实现这一点,但这是一个特定于任务的问题,所以现在就可以了
TLDR;我必须在find_element_by_xpath
中指定占位符名称,错误在于您没有学习如何使用selenium。您只是复制和粘贴代码。如果要搜索的代码有名称,则使用find_element_by_name
。您的html元素有名称吗?您必须问自己:你要搜索的东西的唯一性是什么?名称?id?链接文本?弄清楚这一点,然后阅读文档,找到一种方法,让你搜索唯一的信息。我想这就是“占位符=\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu意思是..谢谢你的回答,我会尝试一下!大约1.5个小时后…从一个相关的Java问题中,我找到了一些代码:driver.findelelement(By.xpath(//input[@name='name']);
并将其修改为username=driver.find_element_By_xpath(//input[@placeholder='Email'])
谢谢您的回复。我肯定是在“复制和粘贴代码”这里…但我正试图用一种半智能的方式来做这件事,现在我正在尽我最大的努力学习…如果你有id,为什么你推荐通过xpath查找元素?为什么不通过id查找元素?
?尝试了一下,也得到了一个错误:selenium.common.exceptions.NoSuchElementException:Message:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“//input[@id='ember442']”@BryanOakley人们经常观察到,虽然元素(如我们讨论中的元素)似乎具有唯一的id
,但在某些情况下,当id
与input
或span
标记一起时,Selenium在轮询HTML DOM时找不到它。因此,为了使搜索更容易,我们尝试传递预期的tag
name到xpath
以缩小搜索范围。Thanks@willyd检查两件事。1)检查表单是否在iframe
中,在这种情况下,必须先切换到框架,然后定位元素。2.如果页面包含JavaScripts或AJAX调用,则首先会导致输入元素的可点击。更新我的状态。感谢您的解答,请参阅原始帖子上的评论。谢谢我正是这样尝试的,并得到了一个类似的错误:selenium.common.exceptions.NoSuchElementException:Message:没有这样的元素:无法定位元素:{“method”:“id”,“selector”:“ember442”}尝试让元素存在于DOM中。如果元素有id,它应该可以工作。综合考虑,假设您的id是唯一的,那么按id搜索是最可靠的。