We Are Going To Discuss About Selenium Finding elements by class name in python. So lets Start this Python Article.
Selenium Finding elements by class name in python
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.
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.
Solution 1
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.
Original Author LittlePanda Of This Content
Solution 2
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
Original Author ZygD Of This Content
Solution 3
As per the HTML:
<html>
<body>
<p class="content">Link1.</p>
</body>
<html>
<html>
<body>
<p class="content">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:
- How to identify an element through classname even though there are multiple elements with the same classnames using Selenium and Python
- Unable to locate element using className in Selenium and Java
- What are properties of find_element_by_class_name in selenium python?
- How to locate the last web element using classname attribute through Selenium and Python
Original Author undetected Selenium Of This Content
Solution 4
Use nth-child, for example: http://www.w3schools.com/cssref/sel_nth-child.asp
driver.find_element(By.CSS_SELECTOR, 'p.content:nth-child(1)')
or http://www.w3schools.com/cssref/sel_firstchild.asp
driver.find_element(By.CSS_SELECTOR, 'p.content:first-child')
Original Author Stan E Of This Content
Conclusion
So This is all About This Tutorial. Hope This Tutorial Helped You. Thank You.