繁体   English   中英

单击带有 Selenium 和 Python 的按钮

[英]Click a button with Selenium and Python

我一直在尝试单击下面 html 代码中的第二个按钮而不使用

find_element_by_xpath

我想尝试通过 class 名称定位元素,但我不断收到错误消息。

Html:

<div class="amount-control" 

    <button class="btn btn-primary btn-fab" type="button"
        <span class="mdi mdi-minus" aria-hidden="true"></span>
        <span class="sr-only">-</span>
    </button>

    <button class="btn btn-primary btn-fab" type="button"
        <span class="mdi mdi-plus" aria-hidden="true"></span>
        <span class="sr-only">+</span>
    </button>

我的代码:

button = driver.find_elements(By.XPATH, "//button[contains(@class, 'btn-primary')]//*[(@class, 'mdi-plus')]/..").click()

有谁知道我如何在不使用 xpath 或完整的 xpath 的情况下找到按钮并单击它?

要单击文本为+的元素,您可以使用以下任一Locator Strategy

  • 使用css_selector

     driver.find_element(By.CSS_SELECTOR, "button.btn.btn-primary.btn-fab > span.mdi-plus +span.sr-only").click()
  • 使用xpath

     driver.find_element(By.XPATH, "//button[@class='btn btn-primary btn-fab']//span[@class='sr-only' and text()='+']").click()

理想情况下,要单击可点击元素,您需要为element_to_be_clickable()诱导WebDriverWait ,并且可以使用以下任一定位器策略

  • 使用CSS_SELECTOR

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-primary.btn-fab > span.mdi-plus +span.sr-only"))).click()
  • 使用XPATH

     WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-primary btn-fab']//span[@class='sr-only' and text()='+']"))).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 已经有一个名为driver.find_element_by_class_name的方法

所以要找到你的 object 只需做button = driver.find_element_by_class_name("btn btn-primary btn-fab")

您可以简单地使用 css 选择器来找到您想要的元素。 这里在 div 下有两个按钮,带有 class amount-control 如果您想在该 div 下找到第一个按钮,可以使用find_element_by_css_selector以及以下 css 选择器:

button = driver.find_element_by_css_selector('div.amount-control > button:first-child')

如果您想获得第二个按钮,只需将:first-child更改为:nth-of-type(2) ,如下所示:

button = driver.find_element_by_css_selector('div.amount-control > button:nth-of-type(2)')
//button[@class="btn btn-primary btn-fab"][.//span[@class="mdi mdi-minus"]]

还应该是一个有效的 xpath ,其中包含一个跨度与该 class 以定位按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM