Unable to locate elements in Selenium (Python)

This error message…

 UserWarning: find_element_by_* commands are deprecated. Please use find_element() instead
  warnings.warn("find_element_by_* commands are deprecated. Please use find_element() instead")

…implies that the find_element_by_* commands are now associated with a deprecation warning in the latest Selenium Python libraries.

This change is inline with the Selenium 4 Release Candidate 1 changelog which mentions:

Specify that the “find_element_by_* …” warning is a deprecation warning (#9700)


Solution

Instead of find_element_by_* you have to use find_element(). As an example:

You need to add the following import:

from selenium.webdriver.common.by import By
  • Using xpath:

    driver.find_element_by_xpath("//*[@id='search']").click()
    

    Needs be replaced with:

    driver.find_element(By.XPATH, "//*[@id='search']").click()
    

Likewise you also have to consider the following changes:

  • Using class_name:

    element = find_element_by_class_name("element_class_name")
    

    Needs be replaced with:

    element = driver.find_element(By.CLASS_NAME, "element_class_name")
    
  • Using id:

    element = find_element_by_id("element_id")
    

    Needs be replaced with:

    element = driver.find_element(By.ID, "element_id")
    
  • Using name:

    element = find_element_by_name("element_name")
    

    Needs be replaced with:

    element = driver.find_element(By.NAME, "element_name")
    
  • Using link_text:

    element = find_element_by_link_text("element_link_text")
    

    Needs be replaced with:

    element = driver.find_element(By.LINK_TEXT, "element_link_text")
    
  • Using partial_link_text:

    element = find_element_by_partial_link_text("element_partial_link_text")
    

    Needs be replaced with:

    element = driver.find_element(By.PARTIAL_LINK_TEXT, "element_partial_link_text")
    
  • Using tag_name:

    element = find_element_by_tag_name("element_tag_name")
    

    Needs be replaced with:

    element = driver.find_element(By.TAG_NAME, "element_tag_name")
    
  • Using css_selector:

    element = find_element_by_css_selector("element_css_selector")
    

    Needs be replaced with:

    element = driver.find_element(By.CSS_SELECTOR, "element_css_selector")
    

tl; dr

You can find a couple of relevant detailed discussion in:

Leave a Comment