Извлечение значения элемента с помощью Selenium

#python #selenium #getattribute

#python #selenium #getattribute

Вопрос:

Я использую Python 3, и мне нужна помощь в извлечении значения элемента из HTML-кода. Соответствующая часть кода веб-страницы выглядит следующим образом:

 <span class="ng-isolate-scope" star-rating="4.61" size="22">
  

В настоящее время я использую Selenium и функцию get_attribute, но мне не удалось извлечь значение 4,61. Поскольку мне приходится перебирать несколько веб-страниц, соответствующая часть моего кода выглядит следующим образом:

 stars=[]
i=driver.find_elements_by_xpath("//*[@star-rating]")
for y in i:
    temp=str(y.get_attribute("value"))
    stars.append(temp)
  

но это работает не так, как я ожидал. Не могли бы вы помочь мне с точки зрения того, что я здесь делаю неправильно? Большое спасибо за ваше время!

Ответ №1:

Получить star-rating атрибут вместо value :

 temp = y.get_attribute("star-rating"))
  

Обратите внимание, что вам не нужно вызывать str() результат get_attribute() — вы получите значение атрибута в виде строки.

Вы также можете улучшить код и собрать оценки в одну строку, используя понимание списка:

 stars = [elm.get_attribute("star-rating") 
         for elm in driver.find_elements_by_xpath("//*[@star-rating]")]
  

И, если вам нужны оценки в виде чисел с плавающей запятой, вызовите float() :

 stars = [float(elm.get_attribute("star-rating")) 
         for elm in driver.find_elements_by_xpath("//*[@star-rating]")]
  

И это было бы немного более лаконично с помощью селектора CSS:

 stars = [float(elm.get_attribute("star-rating")) 
         for elm in driver.find_elements_by_css_selector("[star-rating]")]
  

Комментарии:

1. Это сработало отлично. Большое спасибо @alecxe! И спасибо за предложения по кодированию, они очень ценятся.