Selenium为什么不按名称查找元素? (Python,Firefox)

时间:2019-03-13 17:02:19

标签: python selenium selenium-webdriver

我有以下HTML

<button name="_eventId_confirmed" class="btn btn-green margin-bottom-20 bold medium" autofocus="">

和以下Python

btn = driver.find_element_by_name('_eventId_confirmed')

运行此代码将返回错误

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="_eventId_confirmed"]

在这种无效的HTML /代码组合之前,我具有以下HTML元素:

<input name="registration" id="registration" class="size-28" maxlength="7" autofocus="" autocomplete="off" type="text" data-original-title="" title="" style="">

我成功访问过的

elem = driver.find_element_by_name("registration")

为什么第二个起作用但第一个不起作用?

编辑:问题是打开了一个新窗口,我需要切换窗口处理程序。所以,虚惊一场。谢谢大家。

3 个答案:

答案 0 :(得分:1)

“标签名称”与“名称”不同。前者是指HTML元素的标记名,而后者是指HTML元素的“名称”属性。

例如,在您的第一个HTML代码段中,

<button name="_eventId_confirmed" class="btn btn-green margin-bottom-20 bold medium" autofocus="">

button是标签名称,而_eventId_confirmed是(属性)名称。

答案 1 :(得分:1)

这可能是由于您在评论中提到的方式对话。试试

driver.switchTo().frame("ModalFrameTitle");

driver.switchTo().activeElement()

答案 2 :(得分:1)

您可以使用window_handles和switch_to_window方法来做到这一点。

在单击按钮之前,窗口句柄为

window_before = driver.window_handles[0]

elem = driver.find_element_by_name("registration")

单击按钮后,新打开的窗口的窗口句柄为

window_after = driver.window_handles[1]

然后执行切换至窗口方法的方法,以移至新打开的窗口

driver.switch_to.window(window_after)

driver.find_element_by_name("_eventId_confirmed").click()

希望获得帮助。