Message: no such element, почему не находит элемент, хотя селектор указан верно?
Не находит элемент по css селектору, хотя он указан верно
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
Выводит:
Message: no such element: Unable to locate element: {"method":"css selector","selector":".goods-tile__heading"} (Session info: chrome=94.0.4606.81)
Вот страница с которой проходит парсинг: https://rozetka.com.ua/search/?producer=gazer&seller=rozetka&text=Gazer
Вот код элемента:
.goods-tile__title {
font-size: 14px;
}
<div class="goods-tile__inner" data-goods-id="6427678"><!----><!----><!----><span class="goods-tile__label promo-label promo-label_type_action ng-star-inserted"> −54% </span><!----><!----><!----><!----><!----><!----><div class="goods-tile__actions ng-star-inserted"><!----><!----><!----><app-goods-wishlist class="ng-star-inserted"><!----><button class="wish-button js-wish-button ng-star-inserted" type="button" aria-label="Переместить в список желаний"><!----><svg aria-hidden="true" height="24" width="24" class="ng-star-inserted"><use href="#icon-heart-empty"></use></svg></button><!----><!----></app-goods-wishlist><!----><!----><app-compare-button class="ng-star-inserted"><!----><button class="compare-button ng-star-inserted" type="button"><svg height="24" width="24"><use href="#icon-compare"></use></svg></button><!----></app-compare-button><!----></div><!----><!----><a apprzroute="" class="goods-tile__picture ng-star-inserted" href="https://rozetka.com.ua/gazer_ckr4400/p6427678/"><img src="https://content.rozetka.com.ua/goods/images/base_action/10698517.jpg" class="ng-lazyloaded" alt="Парковочная система Gazer CKR4400 " title="Парковочная система Gazer CKR4400 "><img class="lazy_img_hover ng-lazyloaded display-none" alt="Парковочная система Gazer CKR4400 " title="Парковочная система Gazer CKR4400 " src="https://content.rozetka.com.ua/goods/images/base_action/10698517.jpg"><ul class="super-actions"><!----></ul><!----><!----></a><div class="goods-tile__colors"><!----></div><!----><a apprzroute="" class="goods-tile__heading ng-star-inserted" href="https://rozetka.com.ua/gazer_ckr4400/p6427678/" title="Парковочная система Gazer CKR4400 "><span class="goods-tile__title"><!----> Парковочная система Gazer CKR4400 <!----></span></a><!----><div class="goods-tile__rating ng-star-inserted"><!----><!----><a apprzroute="" href="https://rozetka.com.ua/gazer_ckr4400/p6427678/comments/" class="ng-star-inserted"><!----><div class="goods-tile__stars ng-star-inserted"><svg aria-label="Рейтинг товара 3.6 из 5" height="12" width="65"><g><defs><linearGradient gradientUnits="userSpaceOnUse" id="ratingFill_6427678"><stop stop-color="#ffa900" stop-opacity="1" offset="86%"></stop><stop stop-color="#ffa900" stop-opacity="1" offset="86%"></stop><stop attr.offset="100%" stop-color="#d2d2d2" stop-opacity="1"></stop><stop attr.offset="100%" stop-color="#d2d2d2" stop-opacity="1"></stop></linearGradient></defs><use xlink:href="#icon-product-stars" xmlns:xlink="http://www.w3.org/1999/xlink" fill="url(#ratingFill_6427678)"></use></g></svg><span class="goods-tile__reviews-link"> 5 отзывов </span></div><!----></a><!----></div><div class="goods-tile__prices"><!----><!----><!----><div class="goods-tile__price--old price--gray ng-star-inserted"><!----><!----> 16 899 <small rzcurrency="" class="ng-star-inserted">₴</small></div><div class="goods-tile__price price--red ng-star-inserted"><!----><!----><p class="ng-star-inserted"><span class="goods-tile__price-value"> 7 680 </span><span class="goods-tile__price-currency" rzcurrency="">₴</span></p><!----><app-buy-button extclass="goods-tile__buy-button" _nghost-rz-client-c55="" goods_id="6427678" class="toOrder ng-star-inserted"><!----><!----><!----><button _ngcontent-rz-client-c55="" class="buy-button goods-tile__buy-button ng-star-inserted" type="button" aria-label="Купить"><svg _ngcontent-rz-client-c55="" height="24" width="24"><use _ngcontent-rz-client-c55="" xlink:href="#icon-basket"></use></svg><!----></button><!----></app-buy-button><!----></div></div><!----><!----><!----><div class="goods-tile__availability goods-tile__availability--available ng-star-inserted"> Есть в наличии </div><!----><!----><div class="goods-tile__promo"><!----></div><div class="goods-tile__hidden-holder"><div class="goods-tile__hidden-content"><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----><!----></div></div></div>
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Смотрел сайт и там есть прогрузка элементов. Скорее всего, ваш поиск выполнился раньше, чем элементы прогрузились. Добавьте явные ожидания WebDriverWait или неявные через driver.implicitly_wait(10)
Шаги:
- Код взят из предыдущего ответа
- Добавил с неявным ожиданием (
implicitly_wait) - Поменял селектор для получения
itemsс.goods-tile__picture.ng-star-insertedна.goods-tile.ng-star-inserted, т.к. ранее возвращались не родительские элементы для товаров
Пример:
import time
import pandas as pd
from selenium.webdriver import Chrome
webdriver = r"C:\Users\К.Бояр (Второй)\source\repos\RozetaParcer\chromedriver.exe"
driver = Chrome(webdriver)
driver.implicitly_wait(10)
driver.get("https://rozetka.com.ua/search/?producer=gazer&seller=rozetka&text=Gazer")
total = []
items = driver.find_elements_by_css_selector(".goods-tile.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')