Selenium-Debugging: Element is not clickable at point (X,Y)
Question:
I try to scrape this site by Selenium.
I want to click in "Next Page" buttom, for this I do:
driver.find_element_by_class_name('pagination-r').click()
it works for many pages but not for all, I got this error
WebDriverException: Message: Element is not clickable at point (918, 13). Other element would receive the click: <div class="linkAuchan"></div>
always for this page
I read this question
and I tried this
driver.implicitly_wait(10)
el = driver.find_element_by_class_name('pagination-r')
action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(el, 918, 13)
action.click()
action.perform()
but I got the same error
Answers:
Another element is covering the element you are trying to click. You could use execute_script()
to click on this.
element = driver.find_element_by_class_name('pagination-r')
driver.execute_script("arguments[0].click();", element)
Use explicit wait instead of implicit.
new WebDriverWait(TestingSession.Browser.WebDriver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementExists((By.ClassName("pagination-r'"))));
I had a similar issue where using ActionChains was not solving my error:
WebDriverException: Message: unknown error: Element is not clickable at point (5
74, 892)
I found a nice solution if you dont want to use execute_script:
from selenium.webdriver.common.keys import Keys #need to send keystrokes
inputElement = self.driver.find_element_by_name('checkout')
inputElement.send_keys("n") #send enter for links, buttons
or
inputElement.send_keys(Keys.SPACE) #for checkbox etc
If you are receiving an element not clickable
error, even after using wait on the element, try one of these workarounds:
- Use
Action
to move to the location of element
and then run perform
on action
WebElement element = driver.findElement(By("element_path"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().perform();`
- Check for an overlay or spinner on the
element
and wait
for its invisibility
By spinnerimg = By.id("spinner ID");
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
wait.until(ExpectedConditions.invisibilityOfElementLocated(spinnerimg ));
Hope this helps
I have written logic to handle these type of exception .
def find_element_click(self, by, expression, search_window=None, timeout=32, ignore_exception=None,
poll_frequency=4):
"""It find the element and click then handle all type of exception during click
:param poll_frequency:
:param by:
:param expression:
:param timeout:
:param ignore_exception:list It is a list of exception which is need to ignore.
:return:
"""
if ignore_exception is None:
ignore_exception = []
ignore_exception.append(NoSuchElementException)
if search_window is None:
search_window = self.driver
end_time = time.time() + timeout
while True:
try:
web_element = search_window.find_element(by=by, value=expression)
web_element.click()
return True
except tuple(ignore_exception) as e:
self.logger.debug(str(e))
if time.time() > end_time:
self.logger.exception(e)
time.sleep(poll_frequency)
break
except Exception as e:
raise
return False
Because element is not visible on the browser, first you need to scroll down to the element
this can be performed by executing javascript.
element = driver.find_element_by_class_name('pagination-r')
driver.execute_script("arguments[0].scrollIntoView();", element)
driver.execute_script("arguments[0].click();", element)
I had the similar issue with Chrome driver, changing the PageLoadStrategy
of chromeOptions from ‘Eager’ to Normal
fixed my problem.
chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
I try to scrape this site by Selenium.
I want to click in "Next Page" buttom, for this I do:
driver.find_element_by_class_name('pagination-r').click()
it works for many pages but not for all, I got this error
WebDriverException: Message: Element is not clickable at point (918, 13). Other element would receive the click: <div class="linkAuchan"></div>
always for this page
I read this question
and I tried this
driver.implicitly_wait(10)
el = driver.find_element_by_class_name('pagination-r')
action = webdriver.common.action_chains.ActionChains(driver)
action.move_to_element_with_offset(el, 918, 13)
action.click()
action.perform()
but I got the same error
Another element is covering the element you are trying to click. You could use execute_script()
to click on this.
element = driver.find_element_by_class_name('pagination-r')
driver.execute_script("arguments[0].click();", element)
Use explicit wait instead of implicit.
new WebDriverWait(TestingSession.Browser.WebDriver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementExists((By.ClassName("pagination-r'"))));
I had a similar issue where using ActionChains was not solving my error:
WebDriverException: Message: unknown error: Element is not clickable at point (5
74, 892)
I found a nice solution if you dont want to use execute_script:
from selenium.webdriver.common.keys import Keys #need to send keystrokes
inputElement = self.driver.find_element_by_name('checkout')
inputElement.send_keys("n") #send enter for links, buttons
or
inputElement.send_keys(Keys.SPACE) #for checkbox etc
If you are receiving an element not clickable
error, even after using wait on the element, try one of these workarounds:
- Use
Action
to move to the location ofelement
and then runperform
onaction
WebElement element = driver.findElement(By("element_path"));
Actions actions = new Actions(driver);
actions.moveToElement(element).click().perform();`
- Check for an overlay or spinner on the
element
andwait
for its invisibility
By spinnerimg = By.id("spinner ID");
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
wait.until(ExpectedConditions.invisibilityOfElementLocated(spinnerimg ));
Hope this helps
I have written logic to handle these type of exception .
def find_element_click(self, by, expression, search_window=None, timeout=32, ignore_exception=None,
poll_frequency=4):
"""It find the element and click then handle all type of exception during click
:param poll_frequency:
:param by:
:param expression:
:param timeout:
:param ignore_exception:list It is a list of exception which is need to ignore.
:return:
"""
if ignore_exception is None:
ignore_exception = []
ignore_exception.append(NoSuchElementException)
if search_window is None:
search_window = self.driver
end_time = time.time() + timeout
while True:
try:
web_element = search_window.find_element(by=by, value=expression)
web_element.click()
return True
except tuple(ignore_exception) as e:
self.logger.debug(str(e))
if time.time() > end_time:
self.logger.exception(e)
time.sleep(poll_frequency)
break
except Exception as e:
raise
return False
Because element is not visible on the browser, first you need to scroll down to the element
this can be performed by executing javascript.
element = driver.find_element_by_class_name('pagination-r')
driver.execute_script("arguments[0].scrollIntoView();", element)
driver.execute_script("arguments[0].click();", element)
I had the similar issue with Chrome driver, changing the PageLoadStrategy
of chromeOptions from ‘Eager’ to Normal
fixed my problem.
chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;