首页 文章

如何使用xpath和selenium获取父节点和相邻节点

提问于
浏览
-1

我正在编写代码来刮取github . 我从视图源页面中提取了下面的dom树 .

<tr>
    <td class="blob-num blob-num-addition empty-cell"></td>

    <td id="diff-e07a5ab360bd8cfa1490cbe9056ade49R298" data-line-number="298"
        class="blob-num blob-num-addition js-linkable-line-number"></td>

  <td class="blob-code blob-code-addition">

    <span class="blob-code-inner">+    <span class="pl-k">@PostAuthorize</span>(<span class="pl-s"><span class="pl-pds">&quot;</span>this.belongsToTenant(returnObject) &amp;&amp; (hasAnyRole(&#39;ROLE_ADMIN_INVOICE&#39;,&#39;ROLE_RUN_AS_ADMIN_INVOICE&#39;) or this.belongsToUser(returnObject, authentication.name))<span class="pl-pds">&quot;</span></span>)</span>

  </td>
</tr>

我可以使用下面的xpath查询获取包含“PostAuthorize”的节点 .

//span[contains(.,'PostAuthorize')]

我想到达包含单词“data-line-number”的节点,以便我可以从该属性中提取行号值 . 此外,我想从当前节点遍历父节点 . 我该怎么做?一种方法可以是获取父节点,然后遍历所有子节点以查找所需的子元素 . 但是我如何在xpath中执行此操作?

1 回答

  • 0

    有两种常用技术,Xpath和CSS选择器,但在这种情况下,您只能使用Xpath,因为CSS选择器不支持向后导航 .

    在你的情况下,你需要寻找“PostAuthorize”的父级,这是“blob-code blob-code-addition”,然后寻找“blob-code blob-code-addition”的父级,这是一个tr元素,从那里,你可以通过使用Xpath或CSS选择器自由地找到你想要的元素,如果你想提取它的属性值,在python中,我使用“element.get_attribute()”方法,我相信在Java中,有一个等价物 .

    有关更多信息,请参阅此文档 . 这真的很全面 . http://scraping.pro/res/xpath-cheat/xpath_css_dom_recipes.pdf

    寻找这个术语:“元素之父” .

    希望能帮助到你 .

相关问题