Selenium Finding elements by class name in python

How can I filter elements that have the same class?

<html> <body> <p>Link1.</p> </body>
</html>
<html> <body> <p>Link2.</p> </body>
</html>
3

5 Answers

You can try to get the list of all elements with class = "content" by using find_elements_by_class_name:

a = driver.find_elements_by_class_name("content")

Then you can click on the link that you are looking for.

5

As per the HTML:

<html> <body> <p>Link1.</p> </body>
<html>
<html> <body> <p>Link2.</p> </body>
<html>

Two(2) <p> elements are having the same class content.

So to filter the elements having the same class i.e. content and create a list you can use either of the following Locator Strategies:

  • Using class_name:

    elements = driver.find_elements_by_class_name("content")
  • Using css_selector:

     elements = driver.find_elements_by_css_selector(".content")
  • Using xpath:

    elements = driver.find_elements_by_xpath("//*[@class='content']")

Ideally, to click on the element you need to induce WebDriverWait for the visibility_of_all_elements_located() and you can use either of the following Locator Strategies:

  • Using CLASS_NAME:

    elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "content")))
  • Using CSS_SELECTOR:

    elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".content")))
  • Using XPATH:

    elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@class='content']")))
  • Note : You have to add the following imports :

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

References

You can find a couple of relevant discussions in:

1

By.CLASS_NAME was not yet mentioned:

from selenium.webdriver.common.by import By
driver.find_element(By.CLASS_NAME, "content")

This is the list of attributes which can be used as locators in By:

CLASS_NAME
CSS_SELECTOR
ID
LINK_TEXT
NAME
PARTIAL_LINK_TEXT
TAG_NAME
XPATH

Use nth-child, for example:

driver.find_element(By.CSS_SELECTOR, 'p.content:nth-child(1)')

or

driver.find_element(By.CSS_SELECTOR, 'p.content:first-child')

The most simple way is to use find_element_by_class_name('class_name')

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like