How to Find Element by ID in Selenium Python?
Find Element by ID
To find an HTML Element by id
attribute using Selenium in Python, call find_element()
method and pass By.ID
as the first argument, and the id
attribute's value ((of the HTML Element we need to find)) as the second argument.
find_element(By.ID, "id_value")
Examples
1. There is only one element by given ID
In this example, we shall consider loading the webpage at URL: /tmp/selenium/index-25.html. The contents of this webpage is given below. The webpage contains a div
element with id="xyz"
.
<html>
<body>
<p>Hello World!</p>
<div id="xyz">Read More</div>
<div>Go Back</div>
</body>
</html>
Python Program (Selenium)
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# Setup chrome driver
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# Navigate to the url
driver.get('/tmp/selenium/index-25.html')
# Find element by id
my_div = driver.find_element(By.ID, 'xyz')
print(my_div.get_attribute('outerHTML'))
# Close the driver
driver.quit()
Output
<div id="xyz">Read More</div>
2. There are multiple elements by given ID
In the following example, we have an HTML page with two div
elements whose id="xyz"
. Even though we cannot have multiple elements with the same id, this scenario is quite possible.
In this example, we shall consider loading the webpage at URL: /tmp/selenium/index-26.html. The contents of this webpage is given below. There are two div elements with the same id="xyz"
.
Even if there are more than one element by the given id
, find_element()
function returns only the first element for the given selection criteria.
<html>
<body>
<p>First Article</p>
<div id="xyz">Read More 1</div>
<div>Go Back</div>
<br>
<p>Second Article</p>
<div id="xyz">Read More 2</div>
<div>Go Back</div>
</body>
</html>
Python Program (Selenium)
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# Setup chrome driver
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# Navigate to the url
driver.get('/tmp/selenium/index-26.html')
# Find element by id
my_div = driver.find_element(By.ID, 'xyz')
print(my_div.get_attribute('outerHTML'))
# Close the driver
driver.quit()
Output
<div id="xyz">Read More 1</div>
3. There is no element by given ID
In this example, we shall consider loading the webpage at URL: /tmp/selenium/index-27.html. The contents of this webpage is given below. The webpage contains no div
element with id="xyz"
.
If find_element()
function finds no element by the given id
, then it raises NoSuchElementException
.
<html>
<body>
<p>First Article</p>
<div>Read More 1</div>
<div>Go Back</div>
<br>
<p>Second Article</p>
<div>Read More 2</div>
<div>Go Back</div>
</body>
</html>
Python Program (Selenium)
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
# Setup chrome driver
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# Navigate to the url
driver.get('/tmp/selenium/index-27.html')
# Find element by id
my_div = driver.find_element(By.ID, 'xyz')
print(my_div.get_attribute('outerHTML'))
# Close the driver
driver.quit()
Output
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="xyz"]"}
Summary
In this tutorial of Python Examples, we learned how to find an element by id
attribute in webpage using Selenium.