Internet Explorer xpath未找到元素

时间:2011-12-06 21:54:13

标签: internet-explorer xpath

我正在尝试找到位于

的元素
xpath = //html[1]/body[1]/div[1]/div[2]/div[1]/div[2]/p[1] 

在Firefox中,这可行,但在Internet Explorer中却没有。 IE 可以找到元素,但它在

//html[1]/body[1]/div[1]/div[1]/div[1]/div[2]/p[1] 

我想这可能有意义,因为他们可能会格式化一些来源 不同的是,我的问题是,如果我查看IE页面上的源代码, 然后对我来说,在FF中工作的第一个看起来是正确的。如果我放 从IE输出到FF的源然后Firefox找到该元素 正确地在我期待的位置。

我有从IE获得的页面源,可以在以下找到 http://pastebin.com/Vg9J7cxn。还包括Firefox的来源

有谁知道为什么IE无法找到该元素?我找到了xpath 通过迭代回到dom结构,所以有人都知道 解决方法我可以用来在这些“IE”xpaths中查找元素 未来?

2 个答案:

答案 0 :(得分:3)

当您将源的内容剥离到结构元素时,这就是您所获得的:

<html>
    <head></head>
    <body>
        <div class='appOuterWrapper'>
            <div class='appHeaderContainer'>
                <div class='appHeader'>
                    <div class='appTop'>
                        <div class="appLogonOff"></div>
                    </div>
                    <div class="appCmsMenu">
                        <ul id="nav" class="top"></ul>
                        <div class="breadcrumbs">
                            <div class="crumbs"></div>
                            <div class="thedate"/>
                            <span/>
                        </div>
                        <script></script>
                    </div>
                </div>
            </div>
        </div>
        <div class="containerWrapper cmsContent">
            <div class="appWholePage appContent">
                <div class="home-sidebar"></div>
                <div class="page-body home-page-content"></div>
                <div class="containment"></div>
            </div>
        </div>
    </div><!-- <==== THIS IS INVALID -->
        <div class='appFooterContainer'>
            <div class='appFooter'>
                <span class='links'></span>
                <span class='copyright'></span>
            </div>
            <div class="TestAppitLink"></div>
        </div>
    </body>
</html>

在链接源的两个版本中都是相同的。请注意我的评论,它指出了一个额外的结尾div标记:

</div><!-- <==== THIS IS INVALID -->

如果你看看我的解析器如何格式化文档(基于上面的结构),你会发现没有元素在:

/html[1]/body[1]/div[1]/div[2]

...因为

/html[1]/body[1]/div[1]

...仅包含一个div。 (换句话说,它同意IE。)

我的猜测是 Firefox和IE以不同方式处理此输入树,以便将其作为格式良好的文档呈现给XPath引擎。

选项

  • 修复源文档
  • 使用类而不是位置来表达表达式。您可以在两个浏览器中找到与树匹配的一个。例如:

    /html/body/div[@class='appOuterWrapper']/<rest_of_expression>
    

答案 1 :(得分:0)

在第一个div(// html [1] / body [1] / div [1])中,只有一个div子。我不知道你怎么能解决第二个div。

你想要去的div的等级是什么?