如何使用XPath祖先轴将IMG标记置于ID标记之上

时间:2016-08-02 14:24:45

标签: xml python-2.7 selenium xpath selenium-webdriver

我有以下HTML代码段:

    <div class="GFNQNVHJF GFNQNVHBG" style="left: 0px;width: 15px;height: 15px;position:absolute;">
    <img border="0" style="width:15px;height:15px;background:url(data:image/png;base64,iVBORw0KGgoAAAAN5/ncys6TuRVdp/Iqu06B2HlVnYeBclfyKjobcGoGSk4HKvoPwnmVINwFwRD+H6B4NE7N+RXtpkBFdyGau6AGdII151d0bqmvr2fD63SgE6eCNSMbUNH5Ob+qO4agvwvKOjWBGu6DNCEM6dxFdMABbZ+dVwHX/CGnoiuUaM35ZZ3q+ZVdL0HOBhpwhORoA9o4E4i/5pV3+JOsObu6Rx7o1+UMww8AANkFdufA16fyAAAAAElFTkSuQmCC) no-repeat 0px 0px;" src="http://test1:8080/clearcore/ClearCore/clear.cache.gif" onload="this.__gwtLastUnhandledEvent="load";"/>
</div>
<div class="GFNQNVHLF GFNQNVHNF">
<div style="padding-left: 22px;position:relative;zoom:1;">
<div style="left:0px;margin-top:-8px;position:absolute;top:50%;line-height:0px;">
    <img border="0" style="width:16px;height:16px;background:url(data:image/png;base64,iVBORw0KGg8/9hAAACwElEQVR42o2SW0hTARjH53FLBSddpKim+FBCULolvvQiaVOHBiIussg3MxFcNJZDi+OmsIaM+aB2wSlraTq6eZvDC2MT7zuTOdwUw6nLNUUKE6Ee9Os7h4OQqPTBD87l+393DucYa2wcv6LVDumKi3U3amq+eOTy9wb8HIvwOP9jGs1wvdcbArN5BkZGVkCj6dpOTy9rEolup+HvSCTsSLFaPXhHo7H4KSoIdvsi9PfPg8OxDH19PhCL5TZ0uYpE/SMiSZIgSVs0Hbm0tMXo92/DwsImqNWfdySSR10DA8vQ1DQMcXHX6Vbus+3sW5jR6J1taLD5c3LKb1ZWmleLihrA7Q7B6OgKZvYDRa1DR4cLRCLpMPoXMQFI0nxCrx97pVJZX7S1OXfm5kLQ2joOPt8GKBTt2L8TxYvgcoVAp+sHmcwIiYniXhQ/RM5xlMrOW3b7V1hd/QnT00EUbmLZP2Bq6hsYDCOMKDu7akcub92TSJQbPF5kO0Fw9SguQM5wpFIyXiYzBT2edQgEtqC6umNPrf74x+FYYoJ0d89Bfv7zJT7/vJHPF7xGUTWSjlxk1qlSffrtcgWYXnt6ZiAhIbUzPJz31mCY+OV0roFeb4WUlEIHQRB01rtIKnIKIZjJVVS0r5vNFNDObncQ6uosm/X1Q7ODg8t7k5MBsNkCUFvbBbGxl7XoLkSi98W0paWViHNzn3noXdNBKGoNZxFgyrdY5iEvr3Y7K0vh43Ij6tjsEQdvhq9QvNuyWHzQ3DwBY2PfcepeMJlcYLUuQXJyAX00RuQxcgnhHgxAiMUVTzMzlbMCgdCk1fZCScnLXYEg9UNZWcuuUFhoR58qtvyoo873NJLN40WVZ2Q8WUlKklrx/U1MjIDEldFTv8fs/Jjbp8s6ya4mmT2SB+zzNST+sN4PszC2zAvIWVZ0Agk/SvAXQoBdSmSZLrAAAAAASUVORK5CYII=) no-repeat 0px 0px;" src="http://test1:8080/clearcore/ClearCore/clear.cache.gif" onload="this.__gwtLastUnhandledEvent="load";"/>
</div>
<div>
<div id="operations_edit_process_list_tab_groups_ct_groups_and_tasks_task_2">
<span>
    <span class=" myinlineblock" title="Matches" style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;width:100%;">Matches</span>
</span>

有2个IMG标签,然后是ID标签。我正在尝试找到第一个IMG标签。我想从使用XPATH的ID标签开始。

我的XPath正在找到两个IMG标签。我只想要第一个IMG标签。 我的XPath是:

//div[@id="operations_edit_process_list_tab_groups_ct_groups_and_tasks_task_2"]/ancestor::div[4]//img

如何使用祖先找到第一个IMG标记,因为我想从ID标记开始?

2 个答案:

答案 0 :(得分:1)

您的HTML格式不正确。先解决这个问题。然后...

将XPath包装在parens ()中,并附加[1]以选择第一个节点:

(xpath-that-selects-multiple-nodes)[1]

另请注意,您可以通过在祖先ancestor的谓词中直接指定包含的div来避免使用div轴:

(/div[div/div/div/@id='operations_edit_process_list_tab_groups_ct_groups_and_tasks_task_2']//img)[1]

答案 1 :(得分:1)

如果您只想使用ancestor识别相同内容,那么在这种情况下您可以继续使用以下选项: -

首先,您必须识别具有第一个图片标记的div,div不是div的祖先id = operations_edit_process_list_tab_groups_ct_groups_and_tasks_task_2。这是特定div的sibling

所以你需要先使用以下方法识别兄弟姐妹: -

(//div[@id="operations_edit_process_list_tab_groups_ct_groups_and_tasks_task_2"]/ancestor::div/preceding-sibling::div)[1]

使用上面的xpath识别div后,您可以遍历其子项以查找img标记。

(//div[@id="operations_edit_process_list_tab_groups_ct_groups_and_tasks_task_2"]/ancestor::div/preceding-sibling::div)[1]/img

它会为您提供第一个图像标记。

但我想说的是,如果您只需要识别图像,以防您不需要具有上述ID的div,这是非常低效的方法。