【问题标题】:How to get an XPath from selenium webelement or from lxml?如何从 selenium webelement 或 lxml 获取 XPath?
【发布时间】:2014-08-16 04:46:49
【问题描述】:

我正在使用 selenium,我需要找到一些 selenium web 元素的 XPath。

例如:

import selenium.webdriver
driver = selenium.webdriver.Firefox()

element  = driver.find_element_by_xpath(<some_xpath>)
elements = element.find_elements_by_xpath(<some_relative_xpath>)

for e in elements:
    print e.get_xpath()

我知道我无法从元素本身获取 XPath,但是有没有一种很好的方法来获取它?

我尝试使用 lxml 解析 HTML,但它无法识别 XPath,&lt;some_xpath&gt;,我通过了,尽管 driver.find_element_by_xpath(&lt;some_xpath&gt;)确实设法找到了那个元素。

【问题讨论】:

  • 您是在尝试从 xpath 中查找元素,还是尝试在给定元素的情况下生成 xpath?开头似乎暗示了后者,但您问题的结尾暗示了前者。如果是前者,您可以提供您正在尝试的 xpath,并可能提供 html/xml sn-p?
  • 您不能从元素生成 xpath,因为有多种方法可以通过 xpath 找到元素。
  • 我想找到给定元素的 xpath。我知道给定元素有多个 xpath 表示,但任何表示对我来说都可以。

标签: python selenium xpath html-parsing lxml


【解决方案1】:

lxml 可以使用getpath() 方法为您自动生成absolute xpath。

示例(使用wikipedia 主页,获取徽标的xpath 表达式):

import urllib2
from lxml import etree

data = urllib2.urlopen("https://en.wikipedia.org")
tree = etree.parse(data)
element = tree.xpath('//div[@id="p-logo"]/a')[0]
print tree.getpath(element)

打印:

/html/body/div[4]/div[2]/div[1]/a

【讨论】:

    猜你喜欢
    • 2012-09-29
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多