Ответы пользователя по тегу Selenium
  • Не могу понять почему Selenium не может найти class?

    botermain
    @botermain
    Скажу сразу, мне не очень нравится код, поэтому вот несколько рекомендаций.

    Наученный опытом, скажу, что использовать XPATH намного целесообразнее, но только не абсолютный указатель пути, а индексы, вот ссылка на документацию

    Предлагаю организовать структуру поиска, немного иначе, вместо того, чтобы икать класс, в котором содержатся плитки, сразу искать их, это сэкономит время:
    tabs = browser.find_elements(By.XPATH,'//div[@class="col-12 col-md-6 col-lg-4 col-xl-3"]') #Ищем все товарные плитки


    Теперь, когда у нас есть список со всеми плитками, пройдемся по нему и подостаем все, что нам нужно:
    for i in tabs:
        image = i.find_element(By.XPATH,'//img') #Достаем из плитки изображение
        name = i.find_element(By.XPATH,'//a[@class="card-title item_title sp-line-2"]') #Достаем из плитки название
        price = i.find_element(By.XPATH,'//div[@class="price"]') #Достаем из плитки цену
        print('Изображение: ',image.get_attribute('src'),' Название: ',name.text,' Цена: ',price.text) #Выводим всю информацию

    Идея с отправкой кнопок для прокрутки, тоже не очень, лучше вместо этого запусти следующий скрипт, он автоматически прокрутит вниз на всю длину страницы:
    browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")


    Вот полный скрипт для парсинга, который получился у меня, работает как часы, поэтому прошу к ознакомлению:
    from webdriver_manager.chrome import ChromeDriverManager #Для пакетов Хромиума
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    import time
    
    
    service_package = Service(ChromeDriverManager(log_level=0).install()) #Устанавливаю пакеты Хромиума
    
    options = webdriver.ChromeOptions()
    #options.add_argument('--headless')
    driver = webdriver.Chrome(service=service_package,options=options)
    
    driver.maximize_window() #Разворачиваем страницу, даже если в headless режиме, потому что не всё грузится
    
    driver.get("https://obnovi-oboi.ru/goods?category=oboi")
    
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # Скроллим до конца
    time.sleep(2)
    
    driver.find_element(By.XPATH,'/html/body/main/section/div/div[2]/button').click() # Кликаем кнопку
    time.sleep(5)
    
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # Скроллим до конца
    time.sleep(2)
    
    tabs = driver.find_elements(By.XPATH,'//div[@class="col-12 col-md-6 col-lg-4 col-xl-3"]') #Ищем все товарные плитки
    for i in tabs:
        image = i.find_element(By.XPATH,'//img') #Достаем из плитки изображение
        name = i.find_element(By.XPATH,'//a[@class="card-title item_title sp-line-2"]') #Достаем из плитки название
        price = i.find_element(By.XPATH,'//div[@class="price"]') #Достаем из плитки цену
        print('Изображение: ',image.get_attribute('src'),' Название: ',name.text,' Цена: ',price.text) #Выводим всю информацию


    Если будут ещё вопросы по поводу Selenium, обращайся !
    Ответ написан
    3 комментария