Почему selenium выводит только одну позицию после парсинга

Есть код парсера на Selenium, все работает отлично, но в таблицу заносится только одна позиция более 1000 раз, что могло пойти не так?

from selenium.webdriver import Chrome
import pandas as pd
import time 
webdriver = r"C:\Users\К.Бояр (Второй)\source\repos\RozetaParcer\chromedriver.exe" ### put your browser driver's path

driver = Chrome(webdriver)
driver.get("https://rozetka.com.ua/search/?producer=gazer&seller=rozetka&text=Gazer") ### here the website url

items = len(driver.find_elements_by_css_selector(".goods-tile__picture.ng-star-inserted")) ### here you put the class name of the HTML element which contains the data to scrap

total = []
for item in range(items):

        items = driver.find_elements_by_css_selector(".goods-tile__picture.ng-star-inserted")
        for item in items:
            t_name = driver.find_element_by_css_selector('.goods-tile__title').text
            t_price = driver.find_element_by_css_selector('.goods-tile__price-value').text
            t_nal = driver.find_element_by_css_selector('.goods-tile__availability--available').text
            
            new = ((t_name, t_price, t_nal))
            total.append(new)
            
df = pd.DataFrame(total, columns=['Name', 'Price', 'Nal'])
df.to_csv('Rozetka_parcer_{cur_data}.csv')
print(items)
driver.close()

Ответы (1 шт):

Автор решения: gil9red

Шаги:

  • Убрал ненужный внешний цикл
  • Заметил, что внутри цикла у вас поиск выполняется от driver, что странно, это поиск по всей странице. Скорее всего, нужно t_name, t_price и t_nal искать относительно перебираемых элементов в цикле, поэтому поиск сделал относительно item

Пример:

import time 

import pandas as pd
from selenium.webdriver import Chrome


webdriver = r"C:\Users\К.Бояр (Второй)\source\repos\RozetaParcer\chromedriver.exe"

driver = Chrome(webdriver)
driver.get("https://rozetka.com.ua/search/?producer=gazer&seller=rozetka&text=Gazer")

total = []
items = driver.find_elements_by_css_selector(".goods-tile__picture.ng-star-inserted")
for item in items:
    t_name = item.find_element_by_css_selector('.goods-tile__title').text
    t_price = item.find_element_by_css_selector('.goods-tile__price-value').text
    t_nal = item.find_element_by_css_selector('.goods-tile__availability--available').text
    
    row = t_name, t_price, t_nal
    total.append(row)

driver.close()
    
df = pd.DataFrame(total, columns=['Name', 'Price', 'Nal'])
df.to_csv('Rozetka_parcer_{cur_data}.csv')
→ Ссылка