Mensaje: referencia de elemento obsoleto: el elemento no se adjunta al documento de página en Python

He estado intentando ejecutar el siguiente código en tres enlaces web diferentes. El código funciona bien en un enlace web. Sin embargo, arroja un mensaje de error sobre “Mensaje: referencia de elemento obsoleto: el elemento no está adjunto al documento de la página”. Busqué en los dos hilos anteriores del foro (la solución del elemento obsoleto de Python Selenium y cómo navegar a una nueva página web en Selenium? ) Sobre el mismo mensaje de error pero no resolví el problema. Aquí está mi código:

driver.get('https://github.com/avassalotti') contributions = driver.find_elements_by_xpath(".//ul[@class='filter-list small']//li") print(contributions) for item in contributions: print (item) print(item.text) item.click() time.sleep(3) contribution = driver.find_element_by_xpath(".//*[@class='f4 text-normal mb-2']").text print(contribution) 

El progtwig funciona para este enlace ( https://github.com/alex ) y no funciona para ( https://github.com/agronholm , https://github.com/avassalotti ).

Cualquier consejo para solucionar el problema.

Para recuperar los detalles de las contribuciones evitando la referencia de elementos obsoletos , puede utilizar la siguiente solución:

  • Bloque de código:

     from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC years = [] options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_argument('disable-infobars') driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe') driver.get("https://github.com/agronholm") contributions = WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='profile-timeline-year-list js-profile-timeline-year-list bg-white js-sticky float-right col-2 pl-5']/ul[@class='filter-list small']//li/a"))) for item in contributions: print(item.get_attribute("innerHTML")) years.append(item.get_attribute("href")) for year in years: driver.get(year) print(WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='js-yearly-contributions']//h2[@class='f4 text-normal mb-2']"))).get_attribute("innerHTML")) 
  • Salida de consola:

      2018 2017 2016 2015 2014 2013 2012 2011 2010 2009 260 contributions in the last year 637 contributions in 2017 770 contributions in 2016 298 contributions in 2015 239 contributions in 2014 101 contributions in 2013 113 contributions in 2012 90 contributions in 2011 16 contributions in 2010 2 contributions in 2009 
  • Aquí puede encontrar una discusión detallada sobre la excepción StaleElementReference en PageFactory