【问题标题】:XPath for parent's sibling descendants父母的兄弟后代的 XPath
【发布时间】:2025-12-31 15:35:06
【问题描述】:

我需要抓取以下 HTML,但唯一可靠的句柄是对文本字段的稳定描述。从那里,我需要去它的父母那里,找到下一个兄弟姐妹的父母,然后得到后代(不幸的是,data-automation-id 选择器在网站上这个 sn-p 的每次迭代中都会重复)。我将以下 XPath 放在一起,但我的 RPA 工具无法在文档中找到它。

XPath

div[contains(text(),'STABLE TEXT HANDLE')]/following-sibling::div/div/div/span[data-automation-id="SOMETHING"]

HTML:

<ul>
   <li>
      <div>
          <label>STABLE TEXT HANDLE</label>
      </div>
      <div>
          <div>
              <div>
                  <span></span>
                  <span data-automation-id="something">
                      <div>
                          <div>
                              <div>
                                  DYNAMIC TEXT I WANT TO SCRAPE
                              </div>
                          </div>
                      </div>
                  </span>
                  <span data-automation-id="somethingelse">
                      <div>
                          <div>
                              <div>
                                  DYNAMIC TEXT I WANT TO SCRAPE
                              </div>
                          </div>
                      </div>
                  </span>
              </div>
          </div>
      </div>
   </li>
</ul>

编辑:

经过进一步测试,问题似乎始于contains(text(),'STABLE TEXT HANDLE'),它无法找到该特定节点(无论是label,还是其父级div)。

【问题讨论】:

  • 在 XPath 表达式的开头添加 //。看我的回答!
  • @Prophet 我正在使用 Openbots.ai,它允许 tag[selector='']//tag[@selector='']
  • 所以我看到它终于奏效了?
  • 是的。这是您复制粘贴(并检查拼写错误和所有内容)的东西之一,它们根本不起作用。你摆弄了很多变体,它们都不起作用,然后你回到原来的复制粘贴变体......它就开始工作了。

标签: html web-scraping xpath multiple-axes


【解决方案1】:

请试试这个:

//label[contains(text(),'STABLE TEXT HANDLE')]/../..//span[@data-automation-id="something"]

【讨论】:

  • 只是为了确保我理解 - 这将传递给父 div,然后传递给父 li,并从那里搜索具有特定选择器的后代,对吗?
  • 正确,完全正确。