Selenium/lxml:Get xpath

2024-03-29 07:44:36 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一个get_xpath方法或者一种在selenium或lxml.html中实现类似功能的方法。我有一种感觉,我在什么地方见过,但在文件里找不到这样的东西。

伪代码说明:

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

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

Tags: 文件方法代码功能browsergetbyhtml
3条回答

无论使用什么搜索函数,都可以使用xpath重新格式化搜索以返回元素。例如

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

将返回完全相同的元素。

这就是说,我认为用这种方法扩展selenium是可能的,但几乎毫无意义——您已经向模块提供了找到元素所需的所有信息,为什么要使用xpath(这几乎肯定会更难阅读?)要这么做吗?

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

这个技巧在lxml中有效:

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'

请参阅^{}的文档。

由于元素和xpath表达式之间没有唯一的映射,因此不可能有通用的解决方案。但是,如果您对xml/html有所了解,那么您自己编写它可能会很容易。从元素开始,使用parent遍历树并生成表达式。

相关问题 更多 >