I have this script that I wrote with selenium python, but sometimes I got this problem at this one place, when it shows that is not clickable. Element is there and it can be found but it can not be clickable, because sometimes I need to meet required conditions. See error bellow.
selenium.common.exceptions.ElementClickInterceptedException: Message: Element <div class=" css-1wa3eu0-placeholder"> is not clickable at point (242,476) because another element <div class="dropDownWrapper_artworkDetails_uaWNT"> obscures it
But when this happens I got error and script is stopped. So I need to start it again. Is it possible to do something like this (i did not found the way)…
if not clickable...at driver('selected class') driver.refresh() else pass
This is my thinking, I was unable to find the way but maybe there is a special name or something. If you have any idea, any help is more then welcome.
Thanks in advance!
Advertisement
Answer
To click on the clickable element you need to induce WebDriverWait for the element_to_be_clickable() and you wrap up the line of code within a try-except{}
block and you can use either of the following locator strategies:
Using CSS_SELECTOR:
while True: try: WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div[class$='placeholder']"))).click() break except TimeoutException: driver.refresh() continue
Using XPATH:
while True: try: WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[contains(@class, 'placeholder')]"))).click() break except TimeoutException: driver.refresh() continue
Note: You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC