Как узнать, есть ли элемент в div?

#python-3.x #selenium #selenium-webdriver #webdriver #selenium-chromedriver

Вопрос:

У меня есть список постов, и на некоторые из них есть реакция, на некоторые нет. Я хочу извлечь количество реакций на каждый пост, и проблема в том, что у тех, у кого их нет, нет HTML-кода.

Я попытался отладить с помощью печати.

 print(len(driver.find_elements_by_xpath("//div[@class='occludable-update ember-view']")))
-----
Output: 4 - This is good, because I have 4 divs
 
 print(len(driver.find_elements_by_xpath("//span[@class='v-align-middle social-details-social-counts__reactions-count']"))
----
Output:2 - This is good, because I have 2 posts that got reactions
 

Когда я пытался выяснить, получил ли пост реакцию,

 print(len(driver.find_elements_by_xpath("//div[@class='occludable-update ember-view']")[1].find_elements_by_xpath("//span[@class='v-align-middle social-details-social-counts__reactions-count']")))
----
Output: 2 - Why? Because the second div is empty...
 

HTML-КОД

 <div class="occludable-update ember-view">
  <ul class="social-details-social-counts ">
   <li class="social-details-social-counts__reactions social-details-social-counts__item ">
    <button class="social-details-social-counts__count-valuet " aria-label="1 Reaction’ post" type="button">
       <img class="reactions-icon social-detail">
       <span aria-hidden="true" class="v-align-middle social-details-social-counts__reactions-count">3</span>
    </button>
</li></ul>
</div>

<div class="occludable-update ember-view"> this div has no reaction </div>

<div class="occludable-update ember-view"> this div has no reaction </div>

<div class="occludable-update ember-view">
  <ul class="social-details-social-counts ">
   <li class="social-details-social-counts__reactions social-details-social-counts__item ">
    <button class="social-details-social-counts__count-valuet " aria-label="1 Reaction’ post" type="button">
       <img class="reactions-icon social-detail">
       <span aria-hidden="true" class="v-align-middle social-details-social-counts__reactions-count">3</span>
    </button>
</li></ul>
</div>
 

Ответ №1:

чтобы найти элемент продолжения, используйте .

попробуйте ниже :

 driver.find_elements_by_xpath("//div[@class='occludable-update ember-view']")[1].find_elements_by_xpath(".//descendant::span[@class='v-align-middle social-details-social-counts__reactions-count']")
 

Ответ №2:

Я нашел проблему. После того, как я лучше документировал себя, я обнаружил, что для подэлементов используется .// вместо //

 print(len(driver.find_elements_by_xpath("//div[@class='occludable-update ember-view']")[1].find_elements_by_xpath(".//span[@class='v-align-middle social-details-social-counts__reactions-count']")))

 

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

1. Пожалуйста, укажите дополнительную информацию в своем ответе. Как это написано в настоящее время, трудно понять ваше решение.