Ссылка на устаревший элемент: элемент не прикрепляется к документу страницы при циклическом просмотре страниц - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь просмотреть все продукты в моем каталоге и напечатать ссылки на изображения продуктов.Ниже приведен мой код.

product_links = driver.find_elements_by_css_selector(".product-link")
for link in product_links:
    driver.get(link.get_attribute("href"))
    images = driver.find_elements_by_css_selector("#gallery img")
    for image in images:
        print(image.get_attribute("src"))
    driver.back()

Но я получаю сообщение об ошибке selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document, думаю, это происходит потому, что когда мы возвращаемся на страницу каталога, страница снова загружается и ссылки на элементы в product_links становятсянесвежие.

Как мы можем избежать этой проблемы?Есть ли лучшее решение для этого?

1 Ответ

0 голосов
/ 03 мая 2019

Я столкнулся с подобной проблемой, и вот как я решил ее. По сути, вам нужно обновлять страницу и заново создавать список ссылок каждый раз, когда вы возвращаетесь на страницу. Конечно, делая это, вы не можете использовать цикл for, потому что ваши объекты устарели каждый раз.

К сожалению, я не могу проверить это, поскольку у меня нет доступа к вашему фактическому URL, но это должно быть близко

def get_prod_page(link):
    driver.get(link.get_attribute("href"))
    images = driver.find_elements_by_css_selector("#gallery img")
    for image in images:
        print(image.get_attribute("src"))
    driver.back()

counter=0
link_count= len(driver.find_elements_by_css_selector(".product-link"))
while counter <= link_count:
    product_links = driver.find_elements_by_css_selector(".product-link")[counter:]
    get_prod_page(product_links[0])
    counter+=1
    driver.refresh()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...