Как извлечь текст из элемента с атрибутом style = "display: none; - PullRequest
0 голосов
/ 26 апреля 2019

HTML этой части:

<div class="review-small-text">
 <span class="stars-rate">
    <span property="starsRating">
     <i class="fa fa-star-yellow fa-star"></i>  
     <i class="fa fa-star-yellow fa-star"></i>  
     <i class="fa fa-star-yellow fa-star"></i> 
     <i class="fa fa-star-yellow fa-star"></i>  
     <i class="fa fa-star-yellow fa-star"></i> 
  </span> 
</span>
<span property="reviewRating" typeof="Rating" style="display:none;">
    <span property="ratingValue">5</span> 
    <span property="bestRating">5</span>
    <span property="worstRating">0</span>
</span> 
<span property="itemReviewed" typeof="Service" class="">Liposuction</span> </div>

Я пытаюсь извлечь рейтинг второго значения *1007* ratingValue определенного обзора, используя селен, и я попытался извлечь это значение с помощью этого селектора css:

'div.review-small-text>span:nth-of-type(2)>span:nth-of-type(1)'

но это дает мне пустую строку. также пробовал это

'div.review-small-text>span:nth-child(2)>span:nth-child(1)'

так что я думаю, что проблема не в css-селекторе. Не отображать ни один не создает проблему здесь. Есть ли какой-нибудь возможный способ извлечь это значение?

Исходный код Python, который я пробовал до сих пор:

from selenium import webdriver
import time
url = "myurlhere"
driver = webdriver.Chrome()
driver.get(url)
time.sleep(3)

all_reviews_listings = driver.find_elements_by_xpath("//div[@id='tab_reviews']/div[@class='provider_all_Reviews']/div[@id='pnlReviews']/div")

for review in all_reviews_listings:
    review_rating = review.find_element_by_css_selector('div.review-small-text>span:nth-of-type(2)>span:nth-of-type(1)').text
    print("Review Rating: ", review_rating)

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Вот css для получения ratingValue.

Использование JavaScript:

review_rating = driver.execute_script("""return document.querySelector(".review-small-text > span[property='reviewRating'] > span[property='ratingValue']").textContent""")

Без JavaScript: В качестве альтернативы вы также можете сделатьэто.

driver.find_element_by_css_selector(".review-small-text > span:nth-child(2) > span[property='ratingValue']").get_attribute("textContent")
0 голосов
/ 27 апреля 2019

Тег предка имеет атрибут style="display:none;, поэтому для извлечения всех reviewRatings вы можете использовать следующее решение:

driver.execute_script("arguments[0].removeAttribute('style')", driver.find_element_by_css_selector("div.review-small-text span[property='reviewRating'][typeof='Rating']"))
print([element.text for element in driver.find_elements_css_selector("div.review-small-text span[property='reviewRating'][typeof='Rating'] span")])
...