Исключение Python Selenium StaleElement
Я ищу решение для исключения StaleElementReferenceException, которое возникает при переходе на предыдущую страницу с помощью Selenium.
Вот пример кода для воспроизведения ошибки:
from selenium.webdriver import Chrome
from selenium.common.exceptions import NoSuchElementException
browser = Chrome()
browser.get('https://stackoverflow.com/questions/')
# Closing the pop-up for cookies
try:
browser.find_element_by_class_name('js-accept-cookies').click()
except NoSuchElementException:
pass
# Getting list of links on a StackOverflow page
links = browser.find_element_by_id('questions').find_elements_by_tag_name('a')
links[0].click()
# Going back
browser.back()
try:
browser.find_element_by_class_name('js-accept-cookies').click()
except NoSuchElementException:
pass
# Using the old links
links[1].click()
Я понял основную причину из аналогичных вопросов о стеке, таких как это исключение ссылки на устаревший элемент: как решить?
Однако предлагаемое решение, то есть повторная загрузка ссылок каждый раз, когда я возвращаюсь назад, мне не подходит по соображениям производительности.
Есть ли альтернатива?
Например, заставить новую страницу открываться в новой вкладке, чтобы я мог перемещаться между двумя вкладками?
Любое другое решение приветствуется
1 ответ
links =[ x.get_attribute('href') for x in driver.find_element_by_id('questions').find_elements_by_tag_name('a')]
driver.get(links[0])
driver.back()
Просто получите значение href и перемещайтесь взад и вперед вот так. Элементы, которые вы получаете со страницы, теряются при перемещении страницы.