如何通过Selenium和Python提供的HTML单击基于角度的复选框?

时间:2018-08-04 04:21:06

标签: python selenium selenium-webdriver xpath webdriver

我正在尝试使用硒python单击一个复选框。我尝试过

tabAPICall = (tab) => {
    const { token, baseUrl } = this.state;

    fetch(`${baseUrl}/albums`, {
        method: 'GET',
        headers: { 'Authorization': 'Bearer ' + token }
    })
    .then((response) => response.json())
    .then((data) => {
        return data;
    })

我不断 “ ElementNotVisibleException:”

buttons = driver.find_element_by_xpath("//*[contains(text(), 'Exact')]"); buttons.click()

2 个答案:

答案 0 :(得分:0)

首先,您要找到一个元素,但是要赋予它复数名称buttons。我将使用单数名称button

第二件事甚至是在您的代码段中有两个span,其中包含Exact。您必须更改定位器,以便通过选择器仅选择一个要交互的​​元素。

例如,如果您想要代码段中的第一个Exact,则可以使用以下xPath:

//button[@data-sfs-callout = 'sfs_-sfsLocationExactness-1-place-callout']/span

注意: ,正如@RajKamal已经提到的那样,页面上可以包含文本为Exact的多个元素。您可以通过按F12在开发工具中进行检查。

答案 1 :(得分:0)

根据 HTML ,您已将元素与文本共享,因为精确Angular元素,因此可以在所需元素上调用click()您必须诱使 WebDriverWait 使元素可点击,并且可以使用以下解决方案:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='link icon locationButton inputBox' and @data-autoname='NameAPlace_msypn_LocationExactButton']//span[@class='locationLabel ng-binding'][contains(.,'Exact')]"))).click()

注意:您必须添加以下导入:

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