通过XPATH使用另一个元素查找一个元素

时间:2020-07-12 22:56:36

标签: html xpath

我有一个网站,我希望使用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,这将是一个简单的任务,但要满足一个条件:我需要在包含"css-1x9zltl"类文本的XPATH元素中使用(在这种情况下,将是单词Elixir Developer)。换句话说,我想使用从AppUnite类中提取的单词来访问"css-1x9zltl"。所以开始很简单://div[contains(@class, "css-1x9zltl") and text()="Elixir Developer"]但接下来呢?

2 个答案:

答案 0 :(得分:1)

您想获得招聘公司的名称。

由于JJI网站上@class属性的名称是固定的(css-1x9zltlcss-ajz12e),因此可以使用:

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

请注意,这将选择“ Elixir Developer”,“ Senior Elixir Developer”提供。为了更加严格,请删除第二个contains

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

答案 1 :(得分:0)

如果我对您的问题理解正确,那么以您问题中的示例为例,这样的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>子节点(该子节点的子节点)中,该子节点包含目标文本,最后选择该子节点的文本节点。