clicking on accept cookies refreshes the page with selenium actions chain or javascript click and gives StaleElementReferenceError

  Kiến thức lập trình

I’m trying to close a cookie consent pop-up on a site https://www.meinschiff.com/. I used selenium webdriver for chrome to find the close and accept div element and click on whichever is found first. If I manually choose deny button, then it is closed but it hangs with a loading of another layer. The element’s parent’s parent div element with id=”blur” acts as an ever loading overlay. The code fetches the accept button first and clicks on it but it refreshes the page giving StaleElementReference error. The clicks work perfectly when I open the site in a normal chrome browser.
I want to click accept button and close the pop up.

My code:

          div_elements = WebDriverWait(driver, 
         5).until(EC.presence_of_all_elements_located((By.TAG_NAME, "div")))
     for div_element in div_elements:
        try:
            element_html = div_element.get_attribute("outerHTML")
            div_element_attrs = BeautifulSoup(element_html, "lxml").div.attrs
            # class_attr = div_element.get_attribute('class')
            # title_attr = div_element.get_attribute('title')
            value_attr = div_element.get_attribute('value')
            popup_div = False
            for key in div_element_attrs.keys():
                if any(keyword in (div_element.get_attribute(key) or '').lower() 
                     for keyword in close_keywords) or 
                    (value_attr is not None and value_attr.lower() == 'false'):
                    print("closing div pop-up...")
                    popup_div = True
                    break
                else:
                    if any(keyword in (div_element.get_attribute(key) or 
                        '').lower() for keyword in accept_keywords) or 
                        (value_attr is not None and value_attr.lower() == 'false'):
                        print("accepting div pop-up...")
                        popup_div = True
                        break
            if popup_div: 
                ActionChains(driver).move_to_element(div_element).click().perform()
                time.sleep(2)
                if div_element.is_displayed():
                    print("div element not closed")
                    return False
                else:
                    print("div element closed")
                    return True
        except ElementClickInterceptedException:
             print(f"Div Element click intercepted: 
             {div_element.get_attribute('outerHTML')}")
            continue
        except Exception as e:
             print(f"Error processing div element: {e}")
            continue

I have also tried javascript click with:

driver.execute_script("arguments[0].scrollIntoView(true);", div_element)
driver.execute_script("arguments[0].click();", div_element)

and wait for element to be clickable and it results in same behavior:

 clickable_element = WebDriverWait(driver, 
           10).until(EC.element_to_be_clickable(div_element)) 
      ActionChains(driver).move_to_element(clickable_element).click().perform()

Theme wordpress giá rẻ Theme wordpress giá rẻ Thiết kế website

LEAVE A COMMENT