Ссылка на устаревший элемент: элемент не прикреплен к документу страницы


Python + Selenium: как исправить ошибку "Ссылка на устаревший элемент: элемент не прикреплен к документу страницы"?

Перед нами стоит задача. С помощью библиотеки 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)
Поделиться в соц сетях
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Есть идеи, замечания, предложения? Воспользуйтесь формой Обратная связь или отправьте сообщение по адресу replay@sciencestory.ru
© 2017 Истории науки. Информация на сайте опубликована в ознакомительных целях может иметь ограничение 18+