В настоящее время я пытаюсь выполнить некоторые операции Selenium, но продолжаю сталкиваться с этой ошибкой:
StaleElementReferenceException: Сообщение: ссылка на устаревший элемент: элемент не прикреплен к документу страницы
Код должен http://www.grownjkids.gov/ParentsFamilies/ProviderSearch, непрерывно нажимать следующую кнопку («>») результатов и очищать результаты со всех страниц в цикле.Он будет делать это правильно на нескольких страницах, но время от времени не будет работать на случайной странице с вышеупомянутым исключением.
Я уже просматривал многочисленные сообщения StackOverflow со схожими проблемами и пробовал некоторые из предложенных исправлений, напримеркак использование класса WebDriverWait для реализации явного ожидания, использование блоков try / исключением для зацикливания и повторного связывания элемента с использованием метода driver.find_element ... при условии возникновения исключения StaleElementReferenceException и попытки обоих
driver.find_element_by_id
и
driver.find_element_by_xpath.
Ниже мой код:
url = "http://www.grownjkids.gov/ParentsFamilies/ProviderSearch"
driver = webdriver.Chrome('MY WEBDRIVER FILE PATH')
driver.implicitly_wait(10)
driver.get(url)
#clears text box
driver.find_element_by_class_name("form-control").clear()
#clicks on search button without putting in any parameters, getting all the results
search_button = driver.find_element_by_id("searchButton")
search_button.click()
#function to find next button
def find(driver):
try:
element = driver.find_element_by_class_name("next")
if element:
return element
except StaleElementReferenceException:
while (attempts < 100):
element = driver.find_element_by_class_name("next")
if element:
return element
attempts += 1
#keeps on clicking next button to fetch each group of 5 results
while True:
try:
nextButton = WebDriverWait(driver, 2000).until(find)
except NoSuchElementException:
break
nextButton.send_keys('\n')
table = driver.find_element_by_id("results")
html_source = table.get_attribute('innerHTML')
print html_source
IЯ догадываюсь, что WebDriverWait до 2000 и цикл 100 попыток на самом деле не работают (возможно, он не входит в этот блок?), потому что результаты одинаковы, независимо от того, насколько я их увеличу.Любые отзывы о моем коде также приветствуются, так как я впервые использую Selenium, и я довольно плохо знаком с Python.