How to find Element by XPath in Selenium Python?
Find Element by XPath
To find an HTML Element by an XPath (language used for locating nodes in HTML) using Selenium in Python, call find_element()
method and pass By.XPATH
as the first argument, and the XPath value as the second argument.
find_element(By.XPATH, "xpath_value")
If there are multiple HTML Elements with the same given XPath value in the webpage, then find_element() returns the first HTML Element of those.
Examples
1. Get first Div in the body
In the following example, we have an HTML page with a div
element. In the Python program, we will find the first div
element using find_element()
method and XPath = '/html/body/div[1]'
.
The XPath expression '/html/body/div
' returns all the immediate child divs inside body. And [1]
returns the first of those elements.
HTML webpage
We shall load the following webpage at URL: /tmp/selenium/index-25.html.
<html>
<body>
<p>Hello World!</p>
<div>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 XPath expression
my_div = driver.find_element(By.XPATH, '/html/body/div[1]')
print(my_div.text)
# Close the driver
driver.quit()
Output
Read More
2. There are multiple elements identified by given XPath
Now, let us consider the scenario where there are multiple HTML Elements that match the given XPath. We will use find_element()
function to find the first element which matches with the given XPath '//div'
.
The XPath expression '//div'
matches all the divs in the given webpage.
Even through there are multiple div
elements, find_element()
returns only the first element of those.
HTML webpage
We shall load the following webpage at URL: /tmp/selenium/index-26.html.
<html>
<body>
<p>First Article</p>
<div>Read More 1</div>
<div>Go Back</div>
<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-26.html')
# Find element by XPath expression
my_div = driver.find_element(By.XPATH, '//div')
print(my_div.text)
# Close the driver
driver.quit()
Output
Read More 1
3. There is no element by given XPath
If there is no element by given XPath, find_element() function raises NoSuchElementException
.
In the following example, we have taken an HTML page with no div elements. When we try to find element by the XPath='//div'
using find_element()
function, then the function throws NoSuchElementException
.
HTML webpage
<html>
<head></head>
<body>
<h2>Hello User!</h2>
<p id="para1" class="message intro">This is my <strong>first</strong> paragraph. This is a sample text. Welcome!</p>
</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-28.html')
# Find element by XPath expression
my_div = driver.find_element(By.XPATH, '//div')
print(my_div.text)
# 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":"xpath","selector":"//div"}
Summary
In this tutorial of Python Examples, we learned how to find an element by given XPath in webpage, using Selenium.