我有以下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")
为什么第二个工作但不是第一个?
编辑:问题是打开了一个新窗口,我需要切换窗口处理程序。所以,误报。谢谢你们。
“标签名称”与“名称”不同。前者引用HTML元素的标记名称,而后者引用HTML元素的“名称”属性。
例如,在您的第一个HTML代码段中,
<button name="_eventId_confirmed" class="btn btn-green margin-bottom-20 bold medium" autofocus="">
button
是标签名称,而_eventId_confirmed
是(属性)名称。
这可能是因为您在评论中提到的模态对话。尝试
driver.switchTo().frame("ModalFrameTitle");
要么
driver.switchTo().activeElement()
您可以使用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()
希望这有帮助。