То, как вы выполняете функцию click , является правильным: функция find_elements возвращает список WebElements , и вы вызываете click функция одного из его элементов. Проблема находится в другом месте.
Документы: Исключение ссылки на устаревший элемент
Исключение ссылки на устаревший элемент выдается в одном из двух случаев, первое является более распространенным чем второй:
Элемент был полностью удален.
Элемент больше не присоединен к DOM.
Как видите, исключение выдается момент, когда селен не может найти элемент в структуре DOM.
Общего решения c этой проблемы не существует, так как оно зависит от веб-страницы, с которой вы работаете.
Обычно такого рода проблемы возникают в dynamici c pages , где, как следует из названия, структура DOM генерируется динамически.
Как просто это может показаться общим решением - это попытаться снова, просто окружив его блоком try и повторно выполнить код:
from selenium.common.exceptions import StaleElementReferenceException
try:
...
except StaleElementReferenceException:
...
В худшем случае, если единственное действие, которое вам нужно выполнить это кнопка с lick (), вы можете обойти DOM, перемещаясь к элементу по координатам, через ActionChain .
from selenium.webdriver.common.action_chains import ActionChains
elem = driver.find_element(By.TAG_NAME, 'body')
ac = ActionChains(driver)
ac.move_to_element(elem).move_by_offset(x_offset, y_offset).click().perform()