Хобрук: Ваш путь к мастерству в программировании

Поиск правильного xpath для подсчета элементов

Я использую селен для задачи и пытаюсь подсчитать список элементов в графе кибаны.

документ такой

<div class="chart-wrapper">
  <div class="chart">
    <svg height="454" width="2031">
      <g clip-path="url(#chart-area256)" transform="translate(0,10)">
        <clipPath id="chart-area256"><rect height="439" width="2031" y="0" x="0"></rect>
          </clipPath>
            <g class="pathgroup 0"><path d="...."></path></g>
            <g class="pathgroup 1"><path d=""></path></g>
            <g class="pathgroup 2"><path d=""></path></g>

          <g class="points area">
            ...</g>
    </svg>
  </div>
</div>

Я запрашиваю все g или все @ class = "pathgroup"

print(len(driver.find_elements_by_xpath('//g')))

а также

print(len(driver.find_elements_by_xpath('//g[@class="pathgroup"]')))

Оба по какой-то причине возвращают нулевые элементы. Так что я попробовал и другие запросы

len(driver.find_elements_by_xpath('//div[@class="chart"]'))

// div [@ class = "chart"] выглядит работоспособным. with devtools возвращает svg, что верно. Но когда я пытаюсь

$x('//div[@class="chart"]/svg').length #devtools  command

снова возвращает ноль. Несмотря на то что

$x('//div[@class="chart"]/*').length #devtools  command

возвращает правильное значение

Мне просто интересно, почему и как! любая идея?

02.12.2015

  • stackoverflow.com/questions/8513691/? 02.12.2015
  • вы используете правильный xpath? как ты это получаешь? 02.12.2015
  • @fabersky да Это правильный xpath. сейчас я использую '// div [@ class = chart] / * / * / *, чтобы получить все интересующие меня элементы. Но это неэффективно, и попытайтесь понять, почему, если я использую фактические теги в пути, не работает. 02.12.2015

Ответы:


1

Xpath имеет count функцию, попробуйте это -

driver.find_elements_by_xpath("count(//div[@class='chart-wrapper']//g)")
03.12.2015
  • Очень извиняюсь за запоздалый ответ. Я попробовал, но это не сработало. Также я пытался поиграть с этим, но безуспешно! 08.12.2015
  • Попробуйте driver.find_elements_by_xpath("count(//div[@class='chart']//g[@class='pathgroup'])") 08.12.2015
  • повторное тестирование на devtools в Firefox $ x (count (// div [@ class = 'chart'] // g [@ class = 'pathgroup'])). возвращает TypeError: выражение не может быть преобразовано для возврата указанного типа. 09.12.2015
  • Не могли бы вы опубликовать URL-адрес веб-сайта и указать, что вы хотите получить? 09.12.2015
  • вам не нужен какой-либо конкретный сайт для запуска кода. В Kibana попробуйте создать круговую диаграмму и просмотрите код, созданный для этой диаграммы. Моей основной задачей было посчитать элементы графа. Я почти уверен, что то, что вы предлагали до сих пор, должно было сработать. Так что мне интересно, есть ли что-то, чего я не понимаю. 09.12.2015

  • 2

    len(driver.find_elements_by_xpath('//g[@class="pathgroup"]')) вернет пустой список, поскольку на странице нет такого класса, как "pathgroup", но "pathgroup 0", "pathgroup 1" ... Вам необходимо реализовать следующий код:

    driver.find_elements_by_xpath('//*[name()="g" and starts-with(@class, "pathgroup")]') 
    

    Попробуйте и дайте мне знать, работает это или нет

    02.12.2015
  • Я попробовал инструменты разработчика. похоже, что это не работает. он возвращает пустой список. 02.12.2015
  • Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.