【问题标题】:How to extract text from element with attribute style="display:none;如何从具有属性 style="display:none; 的元素中提取文本;
【发布时间】:2019-09-16 09:16:18
【问题描述】:

该部分的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>

我正在尝试使用 selenium 提取特定评论的 第二跨度 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-selector。不显示在这里会造成问题。 是否有任何可能的方法来提取该值?

目前我尝试过的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)

【问题讨论】:

  • 您是否尝试从property="ratingValue" 中提取5
  • 是的 DebanjanB 先生

标签: javascript python-3.x selenium-webdriver css-selectors display


【解决方案1】:

这是获取 ratingValue 的 css。

使用 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")

【讨论】:

  • 虽然 html 被渲染了,但是在 python 中我尝试了相同的选择器我得到了空文本
  • 非常感谢先生,它现在正在工作。我正在尝试 .text 不起作用。我忘记获取文本内容了。
【解决方案2】:

祖先标签具有属性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")])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 2011-07-31
    • 2020-09-16
    • 2020-06-17
    • 2014-03-25
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多