pythonseleniumselenium-webdriverweb-scrapingstaleelementreferenceexception

How to fix StaleElementReferenceException on Python Selenium?


I am getting the following error while using Selenium in python:

Traceback (most recent call last):
  File "C:\Users\pedro\Desktop\PyCharm\tutorial\index.py", line 30, in <module>
    select_object_unidades.select_by_value(unidades)
  File "D:\Anaconda3\lib\site-packages\selenium\webdriver\support\select.py", line 79, in select_by_value
    opts = self._el.find_elements(By.CSS_SELECTOR, css)
  File "D:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 761, in find_elements
    return self._execute(Command.FIND_CHILD_ELEMENTS,
  File "D:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 710, in _execute
    return self._parent.execute(command, params)
  File "D:\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 425, in execute
    self.error_handler.check_response(response)
  File "D:\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  (Session info: chrome=101.0.4951.41)
Stacktrace:
Backtrace:
    Ordinal0 [0x0107B8F3+2406643]
    Ordinal0 [0x0100AF31+1945393]
    Ordinal0 [0x00EFC748+837448]
    Ordinal0 [0x00EFF154+848212]
    Ordinal0 [0x00EFF012+847890]
    Ordinal0 [0x00EFF2A0+848544]
    Ordinal0 [0x00F28FF5+1019893]
    Ordinal0 [0x00F2957B+1021307]
    Ordinal0 [0x00F1FF41+982849]
    Ordinal0 [0x00F442C4+1131204]
    Ordinal0 [0x00F1FA64+981604]
    Ordinal0 [0x00F44494+1131668]
    Ordinal0 [0x00F54682+1197698]
    Ordinal0 [0x00F44096+1130646]
    Ordinal0 [0x00F1E636+976438]
    Ordinal0 [0x00F1F546+980294]
    GetHandleVerifier [0x012E9612+2498066]
    GetHandleVerifier [0x012DC920+2445600]
    GetHandleVerifier [0x01114F2A+579370]
    GetHandleVerifier [0x01113D36+574774]
    Ordinal0 [0x01011C0B+1973259]
    Ordinal0 [0x01016688+1992328]
    Ordinal0 [0x01016775+1992565]
    Ordinal0 [0x0101F8D1+2029777]
    BaseThreadInitThunk [0x76BEFA29+25]
    RtlGetAppContainerNamedObjectPath [0x77C47A7E+286]
    RtlGetAppContainerNamedObjectPath [0x77C47A4E+238]

The relevant part is:

select_element_nivel_ensino = driver.find_element(By.ID, "formTurma:inputNivel")
select_object_nivel_ensino = Select(select_element_nivel_ensino)
all_available_options_nivel_ensino = create_list_nivel_ensino()

select_element_unidades = driver.find_element(By.ID, "formTurma:inputDepto")
select_object_unidades = Select(select_element_unidades)
all_available_options_unidades = create_list_unidades()

for nivel_ensino in all_available_options_nivel_ensino:
    select_object_nivel_ensino.select_by_value(nivel_ensino)
    for unidades in all_available_options_unidades:
        select_object_unidades.select_by_value(unidades)
        driver.find_element(By.NAME, "formTurma:j_id_jsp_1370969402_11").click() 

The error happens at the end of the second FOR, after the click, running the loop only once and givin the error showed up there.

What does this error mean and how I can fix this?


Solution

  • Solution:

    all_available_options_nivel_ensino = create_list_nivel_ensino()
    
    all_available_options_unidades = create_list_unidades()
    
    for nivel_ensino in all_available_options_nivel_ensino:
        select_element_nivel_ensino = driver.find_element(By.ID, "formTurma:inputNivel")
        select_object_nivel_ensino = Select(select_element_nivel_ensino)
        select_object_nivel_ensino.select_by_value(nivel_ensino)
        for unidades in all_available_options_unidades:
            select_element_unidades = driver.find_element(By.ID, "formTurma:inputDepto")
            select_object_unidades = Select(select_element_unidades)
            select_object_unidades.select_by_value(unidades)
            driver.find_element(By.NAME, "formTurma:j_id_jsp_1370969402_11").click()