当前位置: 首页 > 知识库问答 >
问题:

NoSuchElementException:无法单击div元素

微生乐
2023-03-14
<td role="presentation" valign="top" class=" x-trigger-cell x-unselectable" style="width:28px;" id="ext-gen1147">
<div class="x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded" role="presentation" id="ext-gen1146">
</div></td>

im 尝试单击此 div 元素,但引发异常。我的代码是:

driver.find_element_by_xpath("//div[@id='ext-gen1146']").click()
driver.find_element_by_xpath("//*[@id='ext-gen1147']").click()
driver.find_element_by_xpath("//div[@class='x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded' and @id='ext-gen1146']")

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:{"method":"xpath","selector":"//*[@id='ext-gen1147']"}(会话信息: chrome=80.0.3987.163)

共有3个答案

乐华晖
2023-03-14

要单击动态元素InduceWebDriverWait()和element_To_be_clickable(),请跟随css选择器

WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.rp-icon-expanded[id^='ext-gen'][role='presentation']"))).click()

您需要导入以下库。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
梁楷
2023-03-14

我想也许你需要先等待可见性,也许这有助于你 https://stackoverflow.com/a/19537085/2069610......例如:

WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<"ext-gen1146>));
有德业
2023-03-14

尝试下面的解决方案,检查您的元素不是动态的,并且它不在iframe中,如果它在iframe中,则您必须切换到它,然后单击您的eelement。

wait.until(EC.element_to_be_clickable((By.ID, "ext-gen1147"))).click()

或者

wait.until(EC.element_to_be_clickable((By.XPATH, "x-trigger-index-0 x-form-trigger x-form-arrow-trigger x-form-trigger-first rp-icon-expanded"))).click()

注意:请将以下导入添加到您的解决方案中

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

要切换到iframe,您可以使用以下代码,确保您只有一个iframe,否则您可以在切换前使用iframe的ID/Name来识别正确的元素:

 iframe = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, 'iframe')))
 driver.switch_to.frame(iframe)
 类似资料:
  • 在我们的应用程序中,当我将鼠标放在菜单项上时,将出现下拉菜单项。在这里我想通过点击它来选择一个项目。主菜单:管理子菜单:管理频道,管理用户在selenium webdriver中,我尝试通过给出xpath,linktext,partial link文本直接点击管理频道。

  • 我们已经更新到最新的Selenium版本3.141.59并且发现点击不起作用。我没有得到一个错误消息,表明单击失败,并移动到下一个函数或行。我已经验证了它在Chrome、Firefox和Edge上不起作用。我们的代码是用Java编写的。 在单击元素之前添加等待时间 操作 JavaScriptExecutor 如有任何帮助,我们将不胜感激!

  • 问题内容: 我有一个具有,沿。在此之下,我还有更多元素。 目前,当我在叠加层外部单击时,我可以单击基础元素。但是,当直接在叠加层上单击时,我无法单击基础元素。 我希望能够单击此按钮,以便可以单击基础元素。 问题答案: 是的,你CAN做到这一点。 使用与IE11 CSS条件语句一起(在IE10或低于不工作),就可以得到这个问题的跨浏览器兼容的解决方案。 使用,您甚至可以将透明放置在叠加层中,并使点击

  • 我还在学习硒,但下面是我尝试过的: 我得到了这些错误: 而且

  • 在谷歌航班页面上,我想点击对话框底部的右箭头(增加天数)(附图)。第二次点击给了我错误。 这是我的代码: 截图

  • 问题:无法点击名为BT_SEARCH的元素 > click_button'Hae'返回:无法找到按钮"Hae"... click_link'Hae'返回:无法找到链接"Hae"... 查找(:xpath,“//输入[@name='BT\u SEARCH']”)。单击似乎找不到元素。 我无法修改源,也没有可用的id或类标签。此外,该页面使用ASP,我认为这是导致问题的原因。