Как подождать загрузку кнопки через Selenium
Занимаюсь парсингом динамического сайта (selenium-wire, bs4). Проблема в том, что скриптом нужно находить кнопку и нажимать на неё, чтобы страница дальше проскролилась и контент прогрузился.
Я на данный момент перепробовал разные варианты, но все они какие-то "костыльные"
Вот это моя последняя рабочая версия
try:
while self.driver.find_element(By.CSS_SELECTOR, '.event__more--static'):
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
self.driver.find_element(By.CSS_SELECTOR, '.event__more--static').click()
time.sleep(3)
except:
print('Вы на дне!')
Проблема в том, что я не могу убрать задержку, тогда код падает из-за того, что элемент не найден (потому что новая кнопка "Показать больше" ещё не загрузилась). И дублирование кода тоже очень сильно смущает
Попробовал ждать элемент на странице через методы selenium
def takeContent(self):
"""Забирает контент со страницы"""
while True:
try:
self.element = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.event__more--static'))
)
self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
print(f'Я ИЩУ КНОПКУ - {self.element}')
self.element.click()
except:
print('Вы на дне!')
break
Данный код попросту отказывается работать. Просто после первого нажатия на кнопку закрывается браузер и всё
На основе комментариев дописал до такого кода
def takeContent(self):
"""Забирает контент со страницы"""
try:
while True:
button = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.event__more--static')))
print('Я нашёл кнопку - ', button)
self.driver.execute_script("arguments[0].click();", button)
print('Я нажал кнопку - ', button)
except:
print('Вы на дне!')
self.content = self.driver.page_source
Теперь проблема следующая:
Я нашёл кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Я нажал кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Я нашёл кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Я нажал кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Я нашёл кнопку - <selenium.webdriver.remote.webelement.WebElement (session="efb72689d4c57f4b5ba6f5c7ce89afb2", element="41d0f0da-e895-415c-bfad-1eddd0dad1fd")>
Он спамит нажатием на одну кнопку. А сайт всё это время крутит лоадинг и не может прогрузить ни один дополнительный "экран". Можно ли как-то написать, чтобы код ждал подгрузки контента?