用python单击HTML<a>标记

2024-10-02 08:19:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着点击带有selenium的html标签,但是我得到了一个错误。你知道吗

如何让selenium点击这样的标签?你知道吗

我已尝试此代码,但出现错误:

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

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

Python代码:
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)

Tags: 代码idbyhtmldriverselenium错误标签
2条回答
  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()
    

所需元素是启用了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
    

相关问题 更多 >

    热门问题