使用XPath或类似的调用从网站返回一个元素?

时间:2014-04-15 01:40:10

标签: html xml xpath webdriver

我觉得我并不理解XPath。我有一个基于java的webdriver打开一个网页,返回一个元素,然后继续。我想加快速度,只打开已经指向元素的网页。这可能吗?

例如,我打开网站www.example.com并返回元素,其中xpath = / html / body / div [3] / table / tbody / tr [2] / td / table / tbody / tr [2] / td [3]。

我想一步到位。

  

我希望能够查询   www.example.com/html/body/div[3]/table/tbody/tr[2]/td/table/tbody/tr[2]/td[3]

我如何在我的程序中实现类似的功能?它会更快吗?

提前谢谢。

3 个答案:

答案 0 :(得分:1)

  

XPath,XML Path Language,是一种用于选择节点的查询语言   来自XML文档。

使用XPath,您无法发出HTTP请求并获取HTTP响应,它只是一种从XML文档中选择XML节点的语言。

答案 1 :(得分:1)

我从你的问题中看出你想要启动一个WebDriver并让它已经指向www.example.com,这样你就可以一步到位地进行查询而无需先去页面。

答案是,你不能。你需要解决两个步骤:

// Go to page
driver.get("http://www.example.com");
// Find element
driver.findElement(By.xpath("/html/body/div[3]/table/tbody/tr[2]/td/table/tbody/tr[2]/td[3]"));

您无法在网页上查询元素,而无需先实际访问该网页并将其加载到浏览器中。 所以不,你不能跳过你想要的步骤,以节省时间并加快你的申请。

答案 2 :(得分:0)

我认为这些答案可能需要一点点更新,但是,我想指出的是,我的答案将与purley XPath有关。我对Java WebDrivers不了解。

无法使用XPath 1.0进行此操作。但是,您可以使用XPath从2.0版开始(XPath and XQuery Functions and Operators 3.1是XPath 3,1的XPath functions 的正式文档,在撰写本文时,它是当前的实现。您还可以找到reference here。)。为此,该功能是:

fn:doc($uri as xs:string?) as document-node()?

,它将以XML文档节点的形式返回文档。因此,您上面的查询将被命名为:

doc("www.example.com")/html/body/div[3]/table/tbody/tr[2]/td/table/tbody/tr[2]/td[3]

但是,这不会导致生成XML片段。您的客户仍然会下载完整的HTML文档,然后在本地提取请求的路径。

要从远程XML资源查询显式XPath,需要执行以下步骤:

  • URI格式规范 [RFC 3986]中的一项更改,引入了转义字符,该字符在URI中标记了XPath表达式。一个字符告诉URI接收者:“此字符之后的所有文本都是XPath表达式”。 Schematron在O'Reilly上成名的Rick Jelliffe撰写了一篇有趣的文章“ URL是否可以包含XPath?”,但是O'Reilly似乎已经杀死了那些文章,旧的链接指向了他们的主要登录页面。 。
  • Web服务器,可以评估此​​URI并发回请求的XML片段(而不是整个文档)。这也意味着,在您的情况下,将不需要fn:doc()函数(无论如何还是错误的工具,因为如上所述,它总是返回完整的文档)。
  • 最后但并非最不重要的一个客户端,可以处理XML片段。

可悲的是,随着HTML5的引入,这些发展已被放弃。