Поиск одного элемента с помощью XPATH с использованием другого элемента - PullRequest
0 голосов
/ 13 июля 2020

У меня есть веб-сайт, с которого я хочу извлечь значения с помощью XPATH. Эти значения можно изменять, но обычно они находятся в одних и тех же повторяющихся деревьях узлов (существуют сотни одинаковых структурно деревьев узлов с одним изменяемым значением). Это пример одного из этих деревьев:

<div style="position: absolute; left: 0px; top: 178px; height: 89px; width: 100%;">
   <a class="css-18rtd1e" href="/offers/appunite-backend-developer-elixir">
      <div class="css-ysfq6d"></div>
      <div class="css-1anw03b"><img src="https://bucket.justjoin.it/offers/company_logos/thumb/22f3ad736e1bc02190ff8beb9d4c55a4de297104.png?1572275788" alt="AppUnite" class="css-h8h6qh"></div>
      <div class="css-rmb95w">
         <div class="css-fxb39h">
            <div class="css-18hez3m">
               <div class="css-1x9zltl">Elixir Developer</div>
               <div class="css-1suuexb"><span class="css-5fhp0m">Online<br>interview</span></div>
            </div>
            <div class="css-16tql6o">
               <span class="css-112rr0w">7 000 - 11 000 PLN </span>
               <div class="css-hw5uoy">New</div>
            </div>
         </div>
         <div class="css-m6o8yl">
            <div class="css-pdwro7">
               <div class="css-ajz12e">
                  <svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
                     <path d="M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z"></path>
                  </svg>
                  AppUnite
               </div>
               <div class="css-1ihx907">
                  <svg class="MuiSvgIcon-root" focusable="false" viewBox="0 0 24 24" aria-hidden="true">
                     <path d="M12 2C8.13 2 5 5.13 5 9c0 4.17 4.42 9.92 6.24 12.11.4.48 1.13.48 1.53 0C14.58 18.92 19 13.17 19 9c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"></path>
                  </svg>
                  Poznań
               </div>
               <span class="css-5fhp0m">Online interview</span>
            </div>
            <div class="css-1ij7669">
               <div class="tag css-1g8us6r">Phoenix</div>
               <div class="tag css-1g8us6r">Elixir</div>
               <div class="tag css-1g8us6r">Web Applications</div>
            </div>
         </div>
      </div>
   </a>
</div>

Я хочу извлечь слово AppUnite, и это будет простая задача, но необходимо выполнить одно условие: мне нужно использовать в моем элементе XPATH, содержащем текст из класса "css-1x9zltl" (в данном случае это слово Elixir Developer). Другими словами, я хочу получить доступ к AppUnite, используя извлеченное слово из класса "css-1x9zltl". Итак, начало прост: //div[contains(@class, "css-1x9zltl") and text()="Elixir Developer"] но что дальше?

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы хотите получить имена нанимающих компаний.

Поскольку имена атрибутов @class фиксированы (css-1x9zltl, css-ajz12e) на веб-сайте JJI, вы можете использовать:

//div[contains(@class,"css-1x9zltl")][contains(.,"Elixir Developer")]/following::div[@class="css-ajz12e"][1]/text()

Обратите внимание, что здесь будут выбраны предложения «Разработчик Эликсира», «Старший разработчик Эликсира». Чтобы быть более строгим, удалите второй contains:

//div[contains(@class,"css-1x9zltl")][.="Elixir Developer"]/following::div[@class="css-ajz12e"][1]/text()
0 голосов
/ 13 июля 2020

Если я вас правильно понял, в случае с образцом в вашем вопросе такое выражение xpath может помочь:

//div[contains(@class, "css-1x9zltl")]["Elixir Developer"]/ancestor::div[@class="css-fxb39h"][1]/following-sibling::div [@class="css-m6o8yl"]//div[@class="css-ajz12e"]/text()

Это выражение в основном определяет местонахождение узла <div>, соответствующего вашему классу и текстовые условия, переходит к первому предку, который является братом узла <div>, в котором похоронен целевой текст, затем переходит к дочернему узлу <div> (этого родственного брата), который содержит целевой текст, и наконец, выбирает текстовый узел этого дочернего узла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...