Locating multiple elements in Selenium Python

Selenium is a powerful web automation tool that allows you to control web browsers programmatically. One of its key features is the ability to locate and interact with multiple elements on a webpage simultaneously. This tutorial covers how to find multiple elements using Selenium with Python.

Setting Up Selenium

First, install Selenium using pip and set up the WebDriver ?

pip install selenium

You'll also need to download a browser driver (like ChromeDriver for Chrome) and ensure it's in your system PATH or specify its location in your code.

Modern Element Location Methods

Selenium 4+ uses the By class with find_elements() method. The older find_elements_by_* methods are deprecated ?

from selenium import webdriver
from selenium.webdriver.common.by import By

# Setup Chrome driver
driver = webdriver.Chrome()
driver.get("https://example.com")

# Find multiple elements by class name
elements = driver.find_elements(By.CLASS_NAME, "content")
print(f"Found {len(elements)} elements")

driver.quit()

Common Locator Strategies

By Class Name

Locate all elements with a specific CSS class ?

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://httpbin.org/html")

# Find all elements with class 'test'
elements = driver.find_elements(By.CLASS_NAME, "test")
for element in elements:
    print(f"Text: {element.text}")

driver.quit()

By Tag Name

Retrieve all elements of a specific HTML tag type ?

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://httpbin.org/html")

# Find all paragraph elements
paragraphs = driver.find_elements(By.TAG_NAME, "p")
print(f"Found {len(paragraphs)} paragraphs")

for i, p in enumerate(paragraphs):
    print(f"Paragraph {i+1}: {p.text[:50]}...")

driver.quit()

By XPath

Use XPath expressions for complex element selection ?

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://httpbin.org/html")

# Find all links containing 'link' in text
links = driver.find_elements(By.XPATH, "//a[contains(text(), 'link')]")
print(f"Found {len(links)} links with 'link' in text")

for link in links:
    print(f"Link: {link.text} - URL: {link.get_attribute('href')}")

driver.quit()

By CSS Selector

Use CSS selectors for flexible element targeting ?

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://httpbin.org/html")

# Find all links inside div elements
links_in_divs = driver.find_elements(By.CSS_SELECTOR, "div a")
print(f"Found {len(links_in_divs)} links inside div elements")

driver.quit()

Practical Example: Extracting Multiple Data Points

Here's a complete example that demonstrates extracting multiple types of data from a webpage ?

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

# Setup Chrome options for headless browsing
chrome_options = Options()
chrome_options.add_argument("--headless")

driver = webdriver.Chrome(options=chrome_options)

try:
    driver.get("https://httpbin.org/html")
    
    # Extract all links
    all_links = driver.find_elements(By.TAG_NAME, "a")
    print(f"Total links found: {len(all_links)}")
    
    # Extract all headings (h1, h2, h3)
    headings = driver.find_elements(By.CSS_SELECTOR, "h1, h2, h3")
    print(f"Total headings found: {len(headings)}")
    
    for heading in headings:
        print(f"Heading: {heading.text}")
    
    # Extract all paragraphs
    paragraphs = driver.find_elements(By.TAG_NAME, "p")
    print(f"Total paragraphs found: {len(paragraphs)}")
    
finally:
    driver.quit()
Total links found: 3
Total headings found: 1
Heading: Herman Melville - Moby-Dick
Total paragraphs found: 1

Best Practices

Strategy Best For Performance
By ID Single unique elements Fastest
By Class Name Elements with same styling Fast
By CSS Selector Complex selections Good
By XPath Complex hierarchical selections Slower

Error Handling

Always handle cases where no elements are found ?

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://httpbin.org/html")

elements = driver.find_elements(By.CLASS_NAME, "nonexistent-class")

if elements:
    print(f"Found {len(elements)} elements")
    for element in elements:
        print(element.text)
else:
    print("No elements found with the specified selector")

driver.quit()
No elements found with the specified selector

Conclusion

Selenium provides multiple strategies for locating elements on web pages. Use find_elements() with the By class for modern, maintainable code. Choose the appropriate locator strategy based on your specific needs and always handle cases where elements might not exist.

Updated on: 2026-03-27T08:28:41+05:30

632 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements