如何使用Selenium和Python单击span元素

2024-05-19 08:10:39 发布

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

我试图识别以下元素,但无论使用何种方法,它都看不到它

<span onclick="onClickTab('details'); return false;" id = "details" name = "details" class style ="display: inline;"">...</span>

我试过:Xpath, relative xpath, onclick, onclick contains, by id, by name,什么都不管用。 它是一个可单击的按钮,在列表中选择项目后出现

目前的代码是:

try:
WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,"//span[@onclick='onClickTab('details'); return false;']")))
except
print("Error")

driver.find_element_by_xpath("//span[@onclick='onClickTab('details'); return false;']").click()

如果有任何像“(”之类的小语法问题,那可能是因为我是手工输入的,这不应该是问题所在。 如果你能给我指出正确的方向,我将永远感激


Tags: 方法nameidfalse元素byreturndriver
3条回答

我能够使用以下xPath选择元素:

//span[contains(@onclick, "onClickTab(\'details\'); return false;")]

使用selenium,我使用了:


try:
    WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.XPATH,'//span[@onclick="onClickTab(\'details\'); return false;"]')))
except:
    print("Error")

driver.find_element_by_xpath('//span[@onclick="onClickTab(\'details\'); return false;"]').click()

在这里,我建议您在Xpath中使用id

driver.find_element_by_xpath("//span[contains(@id,'details')]").click()

如果有多个元素,那么您必须使用driver.find_elements_by_xpath("//span[contains(@id,'details')]")的foreach循环,并使用文本进行检查,然后单击match元素

要单击<span>元素而不是presence_of_element_located(),您必须为element_to_be_clickable()诱导WebDriverWait,并且您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span#details[name='details'][onclick^='onClickTab']"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@id='details' and @name='details'][starts-with(@onclick, 'onClickTab')]"))).click()
    
  • 注意:您必须添加以下导入:

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

相关问题 更多 >

    热门问题