Хобрук: Ваш путь к мастерству в программировании

Не удается найти элемент div - Selenium

Я не могу найти элемент div с помощью css_selector. Пожалуйста, найдите мой код ниже.

driver = wb.Firefox()
driver.get("https://www.jumia.com.ng/")

driver.maximize_window() #//For maximizing window
driver.implicitly_wait(20) #//gives an implicit wait for 20 seconds



#WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CLASS_NAME,'star _s')))
#driver.switch_to.frame(driver.find_element_by_class_name('star _s'))






#selecting phones and tablets

clickObj = driver.find_element_by_xpath("/html/body/div[1]/main/div[1]/div[1]/div[1]/div/a[4]/span").click()



#selecting mobile phones only

driver.find_element_by_xpath("/html/body/div[1]/main/div[2]/div[1]/div/article[1]/a[2]").click()


#selecting smartphones only

driver.find_element_by_xpath("/html/body/div[1]/main/div[2]/div[1]/div/article[1]/a[2]").click()


#selecting android phones only

driver.find_element_by_xpath("/html/body/div[1]/main/div[2]/div[1]/div/article[1]/a[1]").click()



product_info = driver.find_elements_by_css_selector("div.info")

product_name = list()
price = list()
rating = list()

for info in product_info:
    #print(info.find_elements_by_class_name("rev")
    
    product_name.append(info.find_element_by_css_selector("h3.name").text)
    rating.append(info.find_element_by_css_selector("div.rev").text)
    price.append(info.find_element_by_css_selector("div.prc").text)
    #rating.append(info.find_element_by_class_name("rev").text)
    
data = {"product_name":product_name, "rating":rating, "price":price}
df_product = pd.DataFrame.from_dict(data)

Он возвращает следующую ошибку, несмотря на наличие такого элемента, как rev:

NoSuchElementException: Сообщение: невозможно найти элемент: div.rev

Это ссылка на сайт https://www.jumia.com.ng/android-phones/

Пожалуйста помогите. Что я делаю не так?


Ответы:


1

Проблема связана с тем, что не учитывается пробел между именем тега и именем класса в функции find_elements_by_css_selector.

product_info = driver.find_elements_by_css_selector("div .info")

Кроме того, переменная product_info имеет тип ‹class 'list'›. Таким образом, невозможно применить функции или методы библиотеки Selenium. Чтобы заполнить другие списки, вы должны использовать product_info.text и применить для него цикл for.

См. приведенный ниже код в качестве образца:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://www.jumia.com.ng/android-phones/")
driver.maximize_window() #//For maximizing window

#selecting android phones only
product_info = driver.find_elements_by_css_selector("div .info")

for info in product_info:
    try:
        print(info.text)    
    except:
        break

driver.close()
29.08.2020
  • Спасибо за ваш ответ. Я пробовал первое решение, но оно выдавало ошибку InvalidSelectorException. Не могли бы вы уточнить, что вы имеете в виду под пространством? 30.08.2020
  • Вы написали div.info без пробела между div и .info, и это вызывает ошибку. 30.08.2020
  • Я пробовал с пробелом, но все равно получаю ошибку InvalidSelectorException. 31.08.2020
  • Спасибо. Ваш пример кода работал отлично, но это не совсем то, что мне нужно. Я хочу разделить название продукта, цену и обзор на столбцы diff в df 31.08.2020
  • Новые материалы

    Мой процесс подачи заявки в Школе программного обеспечения и дизайна Тьюринга
    Мой последний пост на Medium был в конце августа, и в нем я пообещал написать еще раз, рассказывая историю моего процесса подачи заявки в Школу программного обеспечения и дизайна Тьюринга ...

    Генерация ваших собственных удивительных QR-кодов с использованием Python
    QR-код (код быстрого ответа) — это разновидность матричных штрих-кодов (или двумерных штрих-кодов), изобретенных в 1994 году японской автомобильной компанией Denso Wave . Штрих-код —..

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..