Ошибка при web-scraping - StaleElementReferenceException
При нажатии на ссылку (на строке под номером: 47) при первой последовательности итерации, мы переходим на следующую страницу и возвращаемся назад (на строке под номером: 48), при второй последовательности итерации уже не удается перейти на другую страницу после клика на ссылку и выдаёт следующую ошибку:
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
Почему так происходит и как можно это исправить? КОД:
from selenium import webdriver
class PasresPythonORG():
def __init__(self, driver):
self.URL = "http://www.python.org"
self.DRIVER = driver
self.resultTitleEvent = []
self.resultTimeEvent = []
self.resultLinkEvent = []
self.resultLocationEvent = []
self.run()
def goToPageEvents(self):
""" Переход к страницы: События"""
buttonElementEvents = self.DRIVER.find_element_by_id("events")
buttonElementEvents.click()
def parsePageEvents(self):
""" Метод распарсивающий каждую карточку события"""
mainElementEvents = self.DRIVER.find_element_by_class_name("content-wrapper")
titlesEvents = mainElementEvents.find_elements_by_class_name("event-title")
locationsEvents = mainElementEvents.find_elements_by_class_name("event-location")
for index in range(1, len(titlesEvents) + 1):
# ссылка события
linkEvent = mainElementEvents.find_element_by_xpath(
f'//*[@id="content"]/div/section/div/div/ul/li[{index}]/h3/a')
self.resultLinkEvent.append(linkEvent.get_attribute("href"))
# время события
timeEvent = mainElementEvents.find_element_by_xpath(
f'//*[@id="content"]/div/section/div/div/ul/li[{index}]/p/time')
self.resultTimeEvent.append(timeEvent.text.replace(".", ""))
linkEvent.click()
self.DRIVER.back()
for titleEvent, location in zip(titlesEvents, locationsEvents):
self.resultTitleEvent.append(titleEvent.text)
self.resultLocationEvent.append(location.text)
def run(self):
self.DRIVER.get(self.URL)
self.goToPageEvents()
self.parsePageEvents()
self.DRIVER.quit()
if __name__ == "__main__":
driver = webdriver.Chrome("testSelenium\\chromedriver.exe")
PasresPythonORG = PasresPythonORG(driver)
PasresPythonORG.run