我正在尝试找到位于
的元素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中查找元素 未来?
答案 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的等级是什么?