【问题标题】:Clicking on HTML <a> tag with selenium python使用 selenium python 点击​​ HTML <a> 标签
【发布时间】:2019-08-01 02:02:09
【问题描述】:

我尝试点击带有 selenium 的 html 标记,但出现错误。

我怎样才能让硒点击这样的标签?

我已经尝试过这段代码,但出现错误:

driver.find_element_by_id("btnCreateJE").click()

HTML 代码:
&lt;a id="btnCreateJE" data-permission="true" onclick="NewManualJE()" href="@" class="btn waves-effect waves-light"&gt; New &lt;/a&gt;

Python selenium 代码:​​
driver.find_element_by_id("btnCreateJE").click()

我得到了那个错误:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="btnCreateJE"]"}
  (Session info: chrome=75.0.3770.142)

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:
    1. 确保该元素不属于iframe,如果是这种情况,您需要先switch_to_frame
    2. 确保该元素不属于Shadow DOM,如果是这种情况 - 您将必须找到相关的ShadowRoot 并相对定位您的元素
    3. 可能是链接没有立即出现在DOM 中,也就是说,它稍后是由于AJAX 调用而添加的。如果是这种情况 - 考虑添加 Explicit Wait 之类的:

      WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.ID, "btnCreateJE"))).click()
      

    【讨论】:

      【解决方案2】:

      所需的元素是启用了JavaScript 的元素,因此要在元素上使用click(),您必须诱导WebDriverWait 以使元素可点击,您可以使用以下任一解决方案:

      • 使用PARTIAL_LINK_TEXT

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "New"))).click()
        
      • 使用CSS_SELECTOR

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.btn.waves-effect.waves-light#btnCreateJE[onclick^='NewManualJE']"))).click()
        
      • 使用XPATH

        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='btn waves-effect waves-light' and @id='btnCreateJE'][starts-with(@onclick, 'NewManualJE')]"))).click()
        
      • 注意:您必须添加以下导入:

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

      【讨论】:

      • 我得到这个错误:selenium.common.exceptions.TimeoutException: Message:
      • @Eilon123 试用更新后的答案,让我知道状态。
      • 谢谢你,不幸的是它不起作用,还有其他想法吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多