Selenium - исключение ссылки на устаревший элемент при использовании element.click () - PullRequest
0 голосов
/ 21 апреля 2020

Ошибка вывода:

selenium.common.exceptions.StaleElementReferenceException: Message: The element reference of <span class="a-size-medium a-color-base a-text-normal"> is stale; either 
the element is no longer attached to the DOM, it is not in the current frame context, or the document has been refreshed

Я пытался сделать следующее с селеном:

  1. go to amazon
  2. поиск автоматизировать скучные вещи с помощью python
  3. щелкните первое название продукта
  4. , если элемент ценника находится на сайте продукта, распечатайте его и go вернитесь на предыдущую страницу
  5. если он недоступен, go вернуться на предыдущую страницу
  6. go к следующему названию продукта и повторить с шага 4

, однако произойдет сбой при click()

код:

def experiment2():
    browser = webdriver.Firefox()
    browser.get("https://www.amazon.com/")
    searchelement = browser.find_element_by_css_selector("#twotabsearchtextbox")
    searchelement.send_keys('automate the boring stuff with python')
    searchelement.submit()
    time.sleep(5)
    elements = browser.find_elements_by_css_selector("span.a-color-base.a-text-normal")
    for element in elements:
        element.click()
        try:
            element = browser.find_element_by_css_selector("span.a-size-medium:nth-child(2)")
            print(element.text)
        except:
            browser.back()
            time.sleep(2)
            continue
        browser.back()
        time.sleep(2)

1 Ответ

2 голосов
/ 21 апреля 2020

Так как вы используете driver.back (), он обновил страницу, а захваченные элементы больше не привязаны к странице. Вам нужно снова назначить элементы.

Попробуйте следующий код

def experiment2():
    browser = webdriver.Firefox()
    browser.get("https://www.amazon.com/")
    searchelement = browser.find_element_by_css_selector("#twotabsearchtextbox")
    searchelement.send_keys('automate the boring stuff with python')
    searchelement.submit()
    time.sleep(5)
    elements = browser.find_elements_by_css_selector("span.a-color-base.a-text-normal")
    for element in range(len(elements)):
        elements = browser.find_elements_by_css_selector("span.a-color-base.a-text-normal")
        elements[element].click()
        try:
            element = browser.find_element_by_css_selector("span.a-size-medium:nth-child(2)")
            print(element.text)
        except:
            browser.back()
            time.sleep(2)
            continue
        browser.back()
        time.sleep(2)
...