Search code examples
pythonseleniumselenium-webdriverwebdrivertimeoutexception

Python Selenium TimeoutException error even with wait until clickable and except TimeoutException:


My selenium webdriver been constantly crashing due to

TimeoutException: Message: timeout: Timed out receiving message from renderer: 298.972

The cookies pop up opens up but the script doesn't click on it, in like 20 driver.get(url), 19 times it will accept cookies but the 20th will fail to accept cookies, although the window has opened up, I tried to use the code below but still fails.

retries = 1
while retries <= 5:
    try:
        element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@class="coi-banner__accept"]'))) #wait until cookies clickable
        element.click()
        break
    except TimeoutException:
        driver.refresh()            
        element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@class="coi-banner__accept"]'))) #wait until cookies clickable
        element.click()
        retries += 1

Solution

  • I ran the below script more than 20 times and still it was able to click on the desired button every single time.

    All I had to do was basically to change the locator to CSS from XPath:

    driver = webdriver.Chrome(driver_path)
    driver.maximize_window()
    wait = WebDriverWait(driver, 30)
    
    driver.get("https://www.novasol.com/")
    
    try:
        wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[onclick='CookieInformation.submitAllCategories();']"))).click()
        print('Clicked it')
    except:
        print('Either element was not found, or Bot could not click on it.')
        pass
    

    Imports:

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

    Updated:

    driver.get("https://www.novasol.com/")
    
    def retry_click(number_of_retries, wait_before_performing_click):
        while number_of_retries > 0:
            time.sleep(wait_before_performing_click)
            try:
                wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[onclick='CookieInformation.submitAllCategories();']"))).click()
                break
            except:
                pass
            number_of_retries = number_of_retries - 1
    
    
    try:
        wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[onclick='CookieInformation.submitAllCategories();']"))).click()
        print('Clicked it')
    except:
        print('Either element was not found, or Bot could not click on it.')
        driver.refresh()
        retry_click(20, 10)
        pass