Selenium Python Xpath如何从许多嵌套div标签中选择正确的span文本

时间:2016-03-19 18:30:18

标签: python-2.7 selenium xpath selenium-webdriver

我有一个带左手菜单的网页。它由许多div标签组成。 我注意到,当我的Selenium Python脚本运行时,它没有单击我想要从左侧菜单中单击的文本。它正在点击其他内容。 我的Xpath不正确。

我想找到父级div文本"分析&# 34;

没有点击正确的文字"统计"因为可能有另一个"统计" HTML源代码中的某个地方。如果我从包含文字"分析" 的div标签开始,然后找到文本"统计" ,那么我会得到正确的元素。

我的Xpath是:

.//div//span[@title="Analysis"]/following::div[5]//span[text()="Statistics"]

HTML是:

    <div>
    <span class="" title="Analysis"
          style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;">Analysis</span>
</div>
</div>
</div>
</div>
</div>
<div style="overflow: hidden;">
    <div>
        <div>
            <div aria-selected="false" role="treeitem" aria-setsize="3" aria-posinset="1" aria-expanded="false"
                 aria-level="2">
                <div class="GJPPK2LBIF" style="padding-left: 16px;">
                    <div class="GJPPK2LBIF GJPPK2LBKF" style="padding-left: 16px;position:relative;" onclick="">
                        <div class="GJPPK2LBJF" style="left: 0px;width: 15px;height: 15px;position:absolute;">
                            <img border="0"
                                 style="width:15px;height:15px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAYAAAA7/HbnjJn53wAAAABJRU5ErkJggg==) no-repeat 0px 0px;"
                                 src="http://test1:8080/clearcore/ClearCore/clear.cache.gif"
                                 onload="this.__gwtLastUnhandledEvent=" load";"/>
                        </div>
                        <div class="GJPPK2LBLF">
                            <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,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaekJggg==) no-repeat 0px 0px;"
                                         src="http://test1:8080/clearcore/ClearCore/clear.cache.gif"
                                         onload="this.__gwtLastUnhandledEvent=" load";"/>
                                </div>
                                <div>
                                    <span class="" title="Statistics"
                                          style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;empty-cells:show;display:block;">Statistics</span>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

谢谢, 里亚兹

1 个答案:

答案 0 :(得分:1)

如果您使用FirePath的FireFox,您可以测试xpath并查看您获得的匹配项数量。例如:

//span[text()="Statistics"]

这可能会导致1个匹配的节点,但也会导致更多。让我们假设有两个匹配,你想要的是第二个匹配。然后你选择:

//span[text()="Statistics"][2]