селен питон загрузить больше кнопка не работает

#python #python-3.x #python-2.7 #selenium #selenium-webdriver

Вопрос:

Я пытаюсь нажать кнопку загрузить больше бесконечное время, пока не загрузятся все продукты. Но моя кнопка «Загрузить больше» не работает. вот мой код:

 url = 'https://www.pursemall.ru/vuitton/damier-azur'
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)


try:
    for i in range(1000):
     load_more_button = driver.find_element_by_xpath("//span[text()='Load More Products']")
     load_more_button.click()
except:
    pass
    print("task load more button completed") 
 

почему моя кнопка «Загрузить больше» не работает? где я совершаю ошибку?

Комментарии:

1. Попробуйте проверить элемент и скопировать его CSS-селектор или XPath

Ответ №1:

Что вы можете сделать, так это сделать следующее. Каждый вызов внутри цикла приведет к получению набора продуктов. Вы можете очистить каждый ответ и собрать данные.

В браузере выполните F12 -> Сеть ->> XHR и посмотрите, как браузер выполняет HTTP-вызов каждый раз, когда вы нажимаете >>Загрузить больше продуктов

 import requests


for page in range(1,4):
    url = f'https://www.pursemall.ru/vuitton/damier-azur?page={page}'
    print(url)
    r = requests.get(url)
    print(r.status_code)
 

Ответ №2:

Я не на 100% уверен, почему ваш исходный код не работал, но я смог заставить его работать, скопировав полный XPATH кнопки вместо того, что у вас есть в вашем коде выше.

Я также использовал WebDriverWait и sleep() ждать несколько секунд, пока кнопка не будет загружена после каждого щелчка, так как это хорошая практика для веб-скребков. Возможно, проблема заключалась в сочетании двух 🙂

 url = 'https://www.pursemall.ru/vuitton/damier-azur'
driver = webdriver.Chrome(PATH) # PATH is where you have chromedriver stored on your machine
driver.maximize_window()
driver.get(url)

try:
    for i in range(1000):
        load_more_button = WebDriverWait(driver, 10).until(ec.element_to_be_clickable(
            (By.XPATH, '/html/body/div[1]/div/div[3]/div[3]/span/a/span')))
        sleep(3)
        load_more_button.click()
except:
    pass
    print("task load more button completed")