Ссылка на устаревший элемент: элемент не прикреплен к документу страницы
Перед нами стоит задача. С помощью библиотеки Selenium на языке Python найти на странице ссылки и перейти по ним. Но при выполнении скрипта открывается лишь первая ссылка. А дальше генерируется ошибка (исключение):
stale element reference: element is not attached to the page document
То есть программа нам сообщает, что: ссылка на устаревший элемент: элемент не прикреплен к документу страницы. Что делать?
Одна из причин, по которой возникает ошибка — попытка в цикле обращаться к каждой найденной ссылке. Например, такой код может вызвать описанную выше ошибку:
opt = webdriver.ChromeOptions() bro = webdriver.Chrome( executable_path="..chromedriver.exe", options = opt) hr = bro.find_elements_by_tag_name('a') for item in hr: href = item.get_attribute('href') bro.get(href)
Это часть инстаграм-бота в упрощенном виде. Мы залогинились на сайте, открыли определенный тег. В инстаграм это делается максимально просто: открываем новую ссылку, добавив к адресу сервиса
explore/tags/{hasht}
Где {hasht} — название интересующего нас тега. Здесь еще нужно отсортировать ссылки, но это уже совсем другая история.
При выполнении откроется лишь первая ссылка.
Чтобы скрипт работал, необходимо немного дополнить его. А именно в цикле for не пытаться переходить по ссылкам с помощью метода get. А сначала собрать все ссылки в список. Например, с помощью метода append. А уже после с помощью цикла перебрать получившийся список ссылок.
Например, так:
post_url = [] for item in hr: post_url.append(item) for url in post_url: bro.get(url)