2024-03-29 07:44:36 发布
网友
有没有一个get_xpath方法或者一种在selenium或lxml.html中实现类似功能的方法。我有一种感觉,我在什么地方见过,但在文件里找不到这样的东西。
get_xpath
伪代码说明:
browser.find_element_by_name('search[1]').get_xpath() >>> '//*[@id="langsAndSearch"]/div[1]/form/input[1]'
无论使用什么搜索函数,都可以使用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]"'。因为假设您的原始元素搜索返回了您要查找的内容。
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遍历树并生成表达式。
parent
无论使用什么搜索函数,都可以使用xpath重新格式化搜索以返回元素。例如
将返回完全相同的元素。
这就是说,我认为用这种方法扩展selenium是可能的,但几乎毫无意义——您已经向模块提供了找到元素所需的所有信息,为什么要使用xpath(这几乎肯定会更难阅读?)要这么做吗?
在您的示例中,
browser.find_element_by_name('search[1]').get_xpath()
只返回'//*@name="search[1]"'
。因为假设您的原始元素搜索返回了您要查找的内容。这个技巧在lxml中有效:
请参阅^{} 的文档。
由于元素和xpath表达式之间没有唯一的映射,因此不可能有通用的解决方案。但是,如果您对xml/html有所了解,那么您自己编写它可能会很容易。从元素开始,使用
parent
遍历树并生成表达式。相关问题 更多 >
编程相关推荐