为什么Selenium没有按名称找到元素? (Python,Firefox)

问题描述 投票:0回答:3

我有以下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")

为什么第二个工作但不是第一个?

编辑:问题是打开了一个新窗口,我需要切换窗口处理程序。所以,误报。谢谢你们。

python selenium selenium-webdriver
3个回答
1
投票

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

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

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

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


1
投票

这可能是因为您在评论中提到的模态对话。尝试

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

要么

driver.switchTo().activeElement()

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()

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.