2012-10-08 120 views
0

是否有get_xpath方法或一种在selenium或lxml.html中完成类似的方法。我有一种感觉,我曾经在某处看过,但在文档中找不到像这样的东西。Selenium/lxml:获取xpath

伪代码来说明:

browser.find_element_by_name('search[1]').get_xpath() 

>>> '//*[@id="langsAndSearch"]/div[1]/form/input[1]' 
+0

您是否看过官方文档中的所有支持的定位器:http://release.seleniumhq.org/selenium-remote-control/0.9.2/doc/dotnet/Selenium.html?还有一个'xpath'定位器。编辑:看起来你想做相反的 - 给DOM元素生成和XPath,对吧?我不知道这样的功能,但Selenium IDE插件http://seleniumhq.org/projects/ide/正在为XPath转换做一些DOM,因此您可能需要查看其代码。 – ccpizza

回答

1

由于有一个元素和XPath表达式之间没有唯一的映射,一个通用的解决方案是不可能的。但是如果你知道关于你的xml/html的东西,可能很容易写出你自己的。从你的元素开始,使用parent走上树并生成你的表情。

1

无论您使用哪种搜索功能,您都可以使用xpath重新格式化您的搜索以返回您的元素。例如,

driver.find_element_by_id('foo') 
driver.find_element_by_xpath('//*@id="foo"') 

将返回完全相同的元素。这就是说,我认为用这种方法扩展硒是可能的,但几乎没有意义 - 你已经提供了模块所需的所有信息来找到元素,为什么使用XPath(这几乎肯定会难以阅读?)要做到这一点?

在你的例子中,browser.find_element_by_name('search[1]').get_xpath()只会返回'//*@name="search[1]"'。因为假设是您的原始元素搜索返回了您要查找的内容。

+0

我认为你需要包含括号:'// * [@ id =“foo”]' – reabow

2

这招工作在LXML:中getpath

In [1]: el 
Out[1]: <Element span at 0x109187f50> 

In [2]: el.getroottree().getpath(el) 
Out[2]: '/html/body/div/table[2]/tbody/tr[1]/td[3]/table[2]/tbody/tr/td[1]/p[4]/span' 

查看文档。