【问题标题】:Python/ Selenium: Clicking an element without id or class attributePython / Selenium:单击没有id或class属性的元素
【发布时间】:2021-12-28 11:42:29
【问题描述】:

我正在尝试使用 selenium 让程序单击按钮。

我尝试了许多不同的find_elements_by...() 和许多不同的论点,但我不知道是哪个find_element_by*()。我需要使用以及参数中应该包含的内容

我要点击的内容在哪里:

<article onclick="mainPrincipalPage.PerformCallback('Registro');">
    <div class="imageBox">
        <img src="../Images/iconRegistroHorario.svg">
    </div>
    <div class="titleBox">
        <span>Registro horario</span>
    </div>
</article>

【问题讨论】:

  • 你想点击什么元素?

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

试试这个

browser.find_element_by_xpath('just copy and paste the Xpath').click()

看这张图:

【讨论】:

    【解决方案2】:

    为了定位 Web 元素,您可以使用任何元素属性值的任何唯一组合,不仅是 idCSS Selector
    例如,要定位并单击 article 元素,您可以使用此 XPath 定位器:

    driver.find_element_by_xpath("//*[contains(@onlick,'mainPrincipalPage.PerformCallback(" + "Registro" + ")')]")
    

    要单击包含Registro horario 文本的span,您只需使用即可

    driver.find_element_by_xpath("//span[text()='Registro horario']")
    

    等等

    【讨论】:

      【解决方案3】:

      您可以使用 CSS Selector 方法来选择没有 ID 的元素。 您需要做的就是将 HTML 视为一个文件夹,其中包含其他文件夹。您需要找到一个可以识别的标签,然后找到通往所需元素的方式。这样,您可以定位任何元素,即使存在具有相同标签的另一个元素。

      你可以找到每个 CSS 选择器here

      顺便说一句,你应该通过导入使用By方法:from selenium.webdriver.common.by import By:

      driver.find_element(By.CSS_SELECTOR, 'article[onclick="mainPrincipalPage.PerformCallback('Registro');"]').click
      

      在您的情况下,如果没有 By 方法,它应该如下所示:

      driver.find_element_by_css_selector( 'article[onclick="mainPrincipalPage.PerformCallback('Registro');"]').click
      

      【讨论】:

        【解决方案4】:

        要单击 &lt;article&gt; 中的 图像框,您可以使用以下任一Locator Strategies

        • 使用css_selector

          driver.find_element(By.CSS_SELECTOR, "article[onclick^='mainPrincipalPage']>div.imageBox>img").click()
          
        • 使用xpath

          driver.find_element(By.XPATH, "//article[starts-with(@article, 'mainPrincipalPage')]/div[@class='imageBox']/img").click()
          

        理想情况下,点击您需要为WebDriverWait 诱导element_to_be_clickable() 的元素,您可以使用以下任一Locator Strategies

        • 使用CSS_SELECTOR

          WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "article[onclick^='mainPrincipalPage']>div.imageBox>img"))).click()
          
        • 使用XPATH:

          WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//article[starts-with(@article, 'mainPrincipalPage')]/div[@class='imageBox']/img"))).click()
          
        • 注意:您必须添加以下导入:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-24
          • 2021-05-05
          • 1970-01-01
          • 1970-01-01
          • 2020-09-03
          • 2016-06-14
          • 1970-01-01
          相关资源
          最近更新 更多