Python Selenium, поиск элементов в цикле
Необходимо спарсить некую информацию с сайта(planetazdorovo.ru). Алгоритм следующий:
Заходим на страницу, вылетает окно согласия с выбранным регионом(Ваш регион Москва? Да/Нет). Закрываем это окно.
Вызываем окно выбора региона самостоятельно(driver.find......click()).
Отдаем page_source в BeautifulSoup для получения списка всех возможных регионов, но тут есть маленький нюанс: в левой части у нас выбираются регионы, в правой - города в этом регионе.
После получения списка делаю цикл, в котором по очереди будет выбираться регион и все города в этом регионе, после чего реализуется поисковой запрос и парсинг данных. Вот на этапе выбора города, после выбора региона и проблема.
#vibiraem posledovatelno vse regioni
for region in get_region_list(html):
click_by_the_name(region) #prosto ishem element po nazvaniu regiona
# berem spisok gorodov v vibrannom regione
for city in get_cities_in_regions(driver.page_source):
# perehodim v UL, gde naxodatsa goroda v vibrannom regione
right = driver.find_element_by_xpath("//ul[@class='popup-city-select__city-list popup-city-select__city-list_visible']")
# tak kak ih mozhet bit' neskolko - vibiraem vse LI s gorodami
for r in right.find_elements_by_xpath(".//li[@class='popup-city-select__city-item']"):
# naxodim gorod d predelax LI po nazvaniu i klickaem
text_element = ".//*[contains(text(), '" + city + "')]"
element = r.find_element_by_xpath(text_element)
driver.execute_script("arguments[0].click();", element)
Проблема в том, что когда выбирается город и происходит выход из окна выбора Регион-город, по возвращению в это окно (где уже выбран нужный регион, но надо переключиться на город), элемент со списком городов в активном регионе надо искать еще раз, но моя конструкция этого не делает.
К примеру - есть Владимирская область, в ней два города - Владимир и Александров. На первый он отличной наводится, а второй выдает
Message: stale element reference: element is not attached to the page document.
Подскажите, как решить проблему? Может выбранный подход в корне неверный и есть уже "проторенные" дорожки? Заранее благодарен!
Часть страницы с выбранной Владимирской областью:
<ul class="popup-city-select__city-list popup-city-select__city-list_visible" data-region="102"><li class="popup-city-select__city-item"><a href="#" data-city-id="1330">Владимир</a></li><li class="popup-city-select__city-item"><a href="#" data-city-id="1662">Александров</a></li></ul>
Вот надо загнать в цикл оба li с городами, что бы можно поочередно на них кликнуть, но перед кликом второго города выйти, получить данные и вернуть в окно выбора региона-города.