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:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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)
Method 2
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
Method 3
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)
Method 4
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
Method 5
Use explicit wait instead of implicit.
new WebDriverWait(TestingSession.Browser.WebDriver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementExists((By.ClassName("pagination-r'"))));
Method 6
If you are receiving an element not clickable error, even after using wait on the element, try one of these workarounds:
- Use
Actionto move to the location ofelementand then runperformonaction
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
elementandwaitfor its invisibility
By spinnerimg = By.id("spinner ID");
WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
wait.until(ExpectedConditions.invisibilityOfElementLocated(spinnerimg ));
Hope this helps
Method 7
I had the similar issue with Chrome driver, changing the PageLoadStrategy of chromeOptions from ‘Eager’ to Normal fixed my problem.
chromeOptions.PageLoadStrategy = PageLoadStrategy.Normal;
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0