【问题标题】:NoSuchElementException: could not click the div elementNoSuchElementException:无法单击 div 元素
【发布时间】:2020-07-31 00:44:19
【问题描述】:
<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>

我试图点击这个 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']"} (会话 信息:铬=80.0.3987.163)

【问题讨论】:

    标签: python selenium element


    【解决方案1】:

    你可以尝试 Actions 类来点击预期的元素 -

    Actions actions = new Actions(driver);
    actions.click(element).build().perform();
    

    如果这也不起作用,请尝试使用 JavascriptExecutor

    JavascriptExecutor executor = (JavascriptExecutor) driver;
    executor..executeScript("arguments[0].click();", element);
    

    【讨论】:

      【解决方案2】:

      点击动态元素 Induce WebDriverWait() 和 element_to_be_clickable() 并关注css selector

      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
      

      【讨论】:

      • @DivyaMani : 我刚刚修改了一点 css 选择器。你能再试一次吗?
      【解决方案3】:

      尝试以下解决方案并检查您的元素不是动态的,并且它不在 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/名称来识别正确的元素:

       iframe = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.TAG_NAME, 'iframe')))
       driver.switch_to.frame(iframe)
      

      【讨论】:

      • 检查你的元素不是动态的,它不在 iframe 内
      • 我已经检查过 id 不是动态的,它只在 iframe 中,所以我使用 driver.switch_to.frame(0) 切换。我的官方网址,所以我无法分享..请帮助我
      • 您确定您在正确的 iframe 上并且您的网页没有多个关联的 iframe?
      • 是的..其他元素我可以在同一个 iframe 中访问,只是这会导致错误
      【解决方案4】:

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

      WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds);
      wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<"ext-gen1146>));
      

      【讨论】:

      • 我可以看到元素已加载到 DOM 中,即使加载后显示异常
      猜你喜欢
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      相关资源
      最近更新 更多