Selenium 'Показать еще' тыкается лишь один раз

Рейтинг: -1Ответов: 1Опубликовано: 05.03.2023

Поему цикл отрабатывает лишь один раз? Блок успевает прогрузиться ставил sleep в теле цикла

    while True:
        try:
            WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.XPATH, "//*[@id='__next']/div/main/section/div[2]/div/div/section/div[2]/div[3]/div/div[1]/div[2]/button"))).click()
            time.sleep(1)
        except:
            break

Ответы

▲ 0

Причин в целом может быть много, как с прогрузкой, так и с сменой идентификатора блока или в целом проблемы могут быть с его существованием.

Первый вариант будет искать элемент "Показать еще" заново внутри Вашего цикла с помощью find_element_by_xpath и пытаться нажать на него.

Вариант №1:

while True:
    try:
        element = driver.find_element_by_xpath("//*[@id='__next']/div/main/section/div[2]/div/div/section/div[2]/div[3]/div/div[1]/div[2]/button")
        element.click()
        time.sleep(1)
    except:
        break

Второй вариант будет проверять существует ли Ваш элемент "Показать его" вообще, с использованием find_elements_by_xpath а уже после будет совершать нажатие..

Вариант №2:

while True:
    elements = driver.find_elements_by_xpath("//*[@id='__next']/div/main/section/div[2]/div/div/section/div[2]/div[3]/div/div[1]/div[2]/button")
    if len(elements) > 0:
        element = elements[0]
        element.click()
        time.sleep(1)
    else:
        break

Третий вариант будет немного сумбурным, но тоже имеет место быть. Здесь поиск Вашего элемента "Показать еще" будет происходить в каждом новом блоке. А сам поиск будет производиться по тексту.

Вариант №3:

while True:
    try:
        button = driver.find_element(By.XPATH, "//button[contains(text(), 'Показать еще')]")
        driver.execute_script("arguments[0].scrollIntoView(true);", button)
        button.click()
        time.sleep(1)
    except NoSuchElementException:
        break

Скорее всего один из этих вариантов должен решить Вашу проблему, во всяком случае, - есть полигон для экспериментов, но в случае чего - напишите комментарий. Или дополните вопрос, чтобы Вам могли оказать более конкретную помощь :)