Я пытаюсь создать простой веб-скребок для результатов Amazon.Когда я перебираю результаты, я иногда попадаю на страницу 5 (иногда только на страницу 2) результатов, а затем выбрасывается StaleElementException
.Когда я смотрю в браузере после того, как сгенерировано исключение, я вижу, что драйвер / страница не прокручивались вниз до номера страницы (нижняя строка).
Мой код:
driver.get('https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=sonicare+toothbrush')
for page in range(1,last_page_number +1):
driver.implicitly_wait(10)
bottom_bar = driver.find_element_by_class_name('pagnCur')
driver.execute_script("arguments[0].scrollIntoView(true);", bottom_bar)
current_page_number = int(driver.find_element_by_class_name('pagnCur').text)
if page == current_page_number:
next_page = driver.find_element_by_xpath('//div[@id="pagn"]/span[@class="pagnLink"]/a[text()="{0}"]'.format(current_page_number+1))
next_page.click()
print('page #',page,': going to next page')
else:
print('page #: ', page,'error')
Я смотрел на этот вопрос , и я предполагаю, что подобное исправление может быть применено, но я не уверен, как найти что-то на исчезающей странице.Кроме того, исходя из того, насколько быстро выполняются операторы печати, я вижу, что implicitly_wait(10)
фактически не ждет полных 10 секунд.
Исключение указывает на строку, начинающуюся с "driver.execute_script».Это исключение:
StaleElementReferenceException: Message: The element reference of <span class="pagnCur"> 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
Иногда я получаю ValueError:
ValueError: invalid literal for int() with base 10: ''
Так что эти ошибки / исключения заставляют меня поверить, что что-то происходит с ожиданиемстраница полностью обновляется.