Selenium Webdriver no such element: Unable to locate element

6.9k Views Asked by At

I am new python selenium webdriver Student.

I want to click() next button but it's not working.

I am stuck here few days.

Thanks you any help.

Message Error:

Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='next_button']"}

This is my code:

browser.find_element_by_xpath("//*[@id='next_button']").click()

this is webpage source:

<div id=“banner" class="shell" style="width: 786px; background-color: rgb(0, 0, 255);">
<input id=“json" value=“x" type="hidden">
    <div class="shell">
        <div class="border">
            <div id="header" style="height: 135px;">
            <div id="navigation">
            <div id="main" style="background-color:#FFFFFF;">
                <div id="content" class="left" style="padding: 30px 0px 20px; left: 250px;">
                    <style>
                    <div style="width: 100%;">
                        <div class="inPn" style="width: 100%;background: #ffffff">
                            <div class="detail">
                                <h3>Example Event</h3>
                                <table class="fit">
                                    <colgroup>
                                    <tbody>
                                        <tr valign="middle">
                                            <td>
                                            <td>
                                                <div style="float:right; padding:5px;">
                                                    <img id=“back_button" src="https://www.site/back.png" style="cursor: pointer;">
                                                    <img id=“next_button" src="https://www.site/next.png" style="cursor: pointer;margin-top: 10px;"
2

There are 2 best solutions below

1
Andersson On

As your element requires to get image from src, you might need to wait some time until target element appears on page:

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

button = wait(browser, 10).until(EC.presence_of_element_located((By.XPATH,"//img[@id='next_button']")))
button.click()
5
Marc vT On

I would also suggest waiting for the page to load using the following code:

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

try:
    element = WebDriverWait(browser, 15).until(EC.presence_of_element_located((By.XPATH, "//img[@id='next_button']")))
    browser.find_element_by_xpath("//img[@id='next_button']").click()    
except TimeoutException:
    print 'Timeout - No tag found'
    continue

or use:

WebDriverWait(browser, 15).until(lambda driver: driver.find_elements(By.XPATH,"//img[@id='next_button']"))