Как получить указанный элемент c из списка, используя Selenium с Python - PullRequest
1 голос
/ 09 апреля 2020

Пример списка:

<div class="c-article-metrics-bar__wrapper u-clear-both">
      <ul class="c-article-metrics-bar u-list-inline">
         <li class="c-article-metrics-bar__item">
            <p class="c-article-metrics-bar__count">"277k "
              <span class="c-article-metrics-bar__label">Accesses</span>
            </p>
         </li> 
         <li class="c-article-metrics-bar__item">
            <p class="c-article-metrics-bar__count">"6 "
              <span class="c-article-metrics-bar__label">Citations</span>
            </p>
         </li>
         <li class="c-article-metrics-bar__item">
            <p class="c-article-metrics-bar__count">"594 "
              <span class="c-article-metrics-bar__label">Altmetric</span>
            </p>
         </li>
     </ul>
 </div>

Я пытаюсь получить количество цитат из списка. Проблема в том, что если нет ссылок, элемент списка будет опущен.

Моя идея состояла в том, чтобы получить информацию из тегов p и span и сохранить данные в двух списках. Затем выполните итерацию по списку тегов span, и, если строка «Citations» найдена, верните текст по этому индексу из списка тегов p, например:

metrics_labels = self.wd.find_element_by_css_selector('span.c-article-metrics-bar__label')
labels = [label.text for label in metrics_labels]

metrics_counts = self.wd.find_element_by_css_selector('p.c-article-metrics-bar__count')
counts = [count.text for count in metrics_counts]

for i in range(len(labels) - 1):
  if labels[i] == "Citations":
    return counts[i]

Но это не работает, что я здесь не хватает?

Спасибо!

1 Ответ

0 голосов
/ 09 апреля 2020

Похоже, что вместо сбора всех элементов с find_elements вы собираете только 1, используя find_element здесь:

metrics_labels = self.wd.find_element_by_css_selector('span.c-article-metrics-bar__label')

и здесь:

metrics_counts = self.wd.find_element_by_css_selector('p.c-article-metrics-bar__count')

Исправить попробуйте использовать find_elements_by_css_selector:

metrics_labels = self.wd.find_elements_by_css_selector('span.c-article-metrics-bar__label')
labels = [label.text for label in metrics_labels]

metrics_counts = self.wd.find_elements_by_css_selector('p.c-article-metrics-bar__count')
counts = [count.text for count in metrics_counts]

Надеюсь, это работает, удачи! Если это не помогло, сообщите нам об ошибке, которую вы получаете.

...