Не удается спарсить все элементы страницы selenium

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

Делаю парсер для сайта и столкнулся с такой проблемой что получаю не все элементы на странице

def parse(driver, addlink):
    driver.get(url + 'product-list-page?q=' + urllib.parse.quote(addlink))
    driver.implicitly_wait(15)
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    a = driver.find_elements(By.XPATH, "//span[@class='price__main-value']")
    print(len(a))
    for i in a:
        ...

driver = webdriver.Chrome(options=Options())
driver.set_window_size(1920, 1080)

parse(driver, "видеокарта")

В инструментах разработчика при поиске нужных элементов так же ищутся не все элементы, но при выборе последующих элементов догружаются

введите сюда описание изображения

введите сюда описание изображения

Изменение разрешения экрана меняет количество найденных обьектов. пробовал явное ожидание, и скролл вниз до конца страницы. Это не дало результатов

Ответы

▲ 0Принят

Интересная ситуация.. Однако есть решение. В самом низу страницы есть выпадающий список "Показать по .." по икспасу: //*[.='Показать ещё']/../../div[2]/mvid-dropdown/div/div[1]

Я выбрал из этого списка показать по 12 После чего все 12 элементов отобразились в принте: https://prnt.sc/MhiHlyaPRKqa

Думаю Вам не составит труда прокликать каждую страницу из всех существующих которые там есть, хоть и по 12, за то все.

Код:

#Селекторы
test_test = (By.XPATH, "//span[@class='price__main-value']")
test_test_2 = (By.XPATH, "//*[.='Показать ещё']/../../div[2]/mvid-dropdown/div/div[1]")
test_test_2_1 = (By.XPATH, "//*[.='Показать ещё']/../../div[2]/mvid-dropdown/div/div[2]/div[1]")
def parse(self):
    self.element_is_visible(self.locators.test_test_2).click() # Кликаем на элемент выпадающего списка
    self.element_is_visible(self.locators.test_test_2_1).click() # Кликаем на элемент ИЗ выпадающего списка

    c = 0
    a = self.elements_are_visible(self.locators.test_test) # Здесь все цены на видяшки
    for i in a:
        c += 1
        print('element:', c, ' - ', i.text)