#python #python-3.x #selenium #selenium-webdriver
#python #python-3.x #селен #selenium-webdriver
Вопрос:
Я некоторое время искал в Stackoverflow, пытаясь найти исправление для моего конкретного варианта использования, поскольку я продолжаю время от времени получать исключение StaleElementReferenceException (не все время), но ничего, что я нахожу, похоже, не работает.
Я пытаюсь очистить страницу и собрать все ссылки на странице.
driver.get(SOME_URL)
links = driver.find_elements_by_tag_name('a')
for link in links:
href = link.get_attribute('href')
... DO_SOMETHING_WITH_HREF ...
Я пытался использовать неявные ожидания и пытался позволить моему сценарию спать в течение нескольких секунд, но оба не работают. Я также рассматривал явные ожидания, но fat, поскольку я знаю, что это невозможно, поскольку ссылка может встречаться в любом месте страницы. Сделать так, чтобы не было конкретного элемента, которого я жду.
Комментарии:
1. Соберите все значения href и затем используйте их. ссылки=[link.get_attribute(‘href’) для ссылки в driver.find_elements_by_tag_name(‘a’)]. Затем циклические ссылки для использования. Возможно, вы переходите на другую страницу, и ссылки на ваши элементы станут устаревшими.
Ответ №1:
Исключение StaleElementReferenceException означает, что изменился DOM, для которого была вызвана функция. Поскольку вы что-то сделали со ссылками, вы не можете перебирать все остальное. Мой совет — хранить их в виде списка:
links.append(href)
и в конце вы просматриваете этот список в цикле. Это потому, что вы не взаимодействуете с элементами и не получаете сообщение об ошибке.