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

时间:2015-08-13 00:20:23

标签: java selenium xpath selenium-webdriver web-scraping

我正在编写代码以刮取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 :(得分:0)

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

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

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

寻找这个词:&#34;元素的父母&#34;。

希望它有所帮助。