我觉得我并不理解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]
我如何在我的程序中实现类似的功能?它会更快吗?
提前谢谢。
答案 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,需要执行以下步骤:
fn:doc()
函数(无论如何还是错误的工具,因为如上所述,它总是返回完整的文档)。可悲的是,随着HTML5的引入,这些发展已被放弃。