我正在尝试使用硒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()
答案 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