我正在研究 XPATH 生成器(使用绝对路径)。这个想法是我有一个函数,您可以在其中传递一个 HTMLElement(在 webbrowser 中找到),它将返回 XPATH,如:
/html/body/div[3]/div[1]/a
生成 xpath 的函数如下所示:
HTMLElement node=...;
while (node != null)
{
int i = FindElementIndex(node); //find the index of our current node in the parent elements
if(i==1)
xpath.Insert(0, "/" + node.TagName.ToLower());
else
xpath.Insert(0, "/" + node.TagName.ToLower() + "[" + i+ "]");
node = node.Parent;
}
这个想法是这样的:
a) 取元素
b) 在 element.parent 中找到元素的索引位置
c) 附加 xpath
当父级是自定义 html 代码时出现问题,例如“ <layer>
”示例:
<html>
<body>
<div>
<layer>
<a href="http://site.com">aaa</a>
</layer>
</div>
</body>
</html>
如果我们的 HTMLElement 是<a href="http://site.com">aaa</a>
并且我们调用 ourelement.Parent 它将返回 DIV 元素而不是元素
所以而不是: /html/body/div/layer/a
我们将有(这是不正确的) /html/body/div/a
如何解决?真的希望有人可以帮助解决这个问题。
编辑 1:仅出于测试目的,我在使用 JavaScript 中的 XPath 查询获取节点后,从获取节点的完整路径中实现了该函数
结果是,如果页面包含“自定义”标签(如<layer>
)并且如果页面在 Firefox 中打开,则 xpath 显示正确。
如果页面是在 Internet Explorer 中打开的(就像 webbrowser 一样),<layer>
则不包括作为父页面。
所以问题在于 Internet Explorer 没有正确“解析”dom。解决办法是什么?什么功能可以帮助为这种情况创建 xpath(如果使用 webbrowser htmlelement)。