获取DOM树中元素的XPath?

2 投票
2 回答
2263 浏览
提问于 2025-04-18 08:18

我在用lxml这个库在python里解析HTML和XML。首先,我设置了一个解析器,像这样:

parser = lxml.etree.HTMLParser()

然后从HTML源代码(字符串)中返回一个树形结构:

tree = lxml.etree.fromstring(html, parser).getroottree() # Returns a XML tree

根据lxml的文档,这应该返回一个DOM树(XML)

我想找到一些特定的元素,它们的标签可能是“a”、“div”、“span”等等。

我该如何获取所有可能元素的XPath,也就是它们的路径呢?

补充说明:其实我在开发一个AJAX爬虫,所以我需要用Selenium来点击某些元素,这些元素可能会改变DOM的状态。我把HTML源代码发送给lxml进行分析。

举个例子,我有一个默认元素的列表,像这样:

["a", "button", "li", "nav", "ol", "span", "ul", "header", "footer", "section"]

我需要获取上面这些元素的XPath,这样我就可以把它们传给Selenium去点击,或者触发其他事件。

2 个回答

0

我发现使用“Beautiful Soup”可以让这类事情变得简单很多。

http://lxml.de/elementsoup.html

这里已经有很多类似的问题了,可以试试:

用Python和BeautifulSoup从网页中提取链接

2

其实你不需要使用一个单独的解析器,selenium 本身在 定位元素 方面就已经很强大了:

from selenium import webdriver

browser = webdriver.Firefox()
browser.get('url_goes_here')
list_of_elements = ["a", "button", "li", "nav", "ol", "span", "ul", "header", "footer", "section"]
for tag_name in list_of_elements:
    for element in browser.find_elements_by_tag_name(tag_name):
         print element

撰写回答