如何在python中使用硒查找元素

时间:2019-08-07 21:16:54

标签: python selenium xpath css-selectors webdriverwait

我找不到下面的html元素。

<span class="tabComboBoxName" id="tab-ui-id-1565209097494" aria-hidden="true">20/07/2019</span>

我尝试了以下代码:

elem = browser.find_elements_by_xpath("//class[@id='tab-ui-id-1565209097494']")
elem = browser.find_elements_by_class_name('tabComboBoxName')
elem = browser.find_elements_by_id('tab-ui-id-1565209097494')

对于这些尝试,我得到了一个空列表。

2 个答案:

答案 0 :(得分:1)

该元素是动态生成的元素,因此要定位该元素,需要为所需的visibility_of_element_located()引入 WebDriverWait ,并且可以使用以下任一Locator Strategies:< / p>

  • 使用CSS_SELECTOR

    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.tabComboBoxName[id^='tab-ui-id-']")))
    
  • 使用XPATH

    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[@class='tabComboBoxName' and starts-with(@id, 'tab-ui-id-')][contains(., '20/07/2019')]")))
    
  • 注意:您必须添加以下导入:

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

答案 1 :(得分:0)

  1. 请确保该元素不属于<iframe>(如果属于)-您需要先switch_to() ShadowDOM元素所在的iframe,然后再尝试找到它
  2. 请确保该元素不属于ShadowRoot,如果它属于-您将需要找到相关的WebElement元素,将其强制转换为find_element()并使用{{ 3}}功能,而不是驱动程序
  3. 请确保使用Explicit Wait,因为可能无法立即使用该元素,并且稍后会通过AJAX请求对其进行加载
  4. 尝试使用另一个locator strategy,例如,您可以坚持使用元素文本,例如:

    //span[text()='20/07/2019']