2014-06-25 7 views
6

Ich verwende Selen und ich muss die XPaths einiger Selen-Netzelemente finden.Wie bekomme ich einen XPath von Selenwebelement oder von lxml?

Zum Beispiel:

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() 

Ich weiß, dass ich nicht die XPath aus dem Elemente bekommen selbst, sondern gibt es eine schöne Art und Weise, es trotzdem zu bekommen?

ich mit lxml versucht, die HTML zu analysieren, aber es erkennt nicht die XPath, <some_xpath>, ging ich, obwohl driver.find_element_by_xpath(<some_xpath>)tat dieses Element finden verwalten.

+0

Sind Sie ein Element aus der XPath zu finden versuchen, oder versuchen Sie zu generieren der xpath ein Element gegeben? Der Anfang scheint letzteres nahe zu legen, aber das Ende Ihrer Frage deutet auf das erstere hin. Wenn es ersteres ist, könnten Sie den xpath, den Sie versuchen, und möglicherweise das html/xml-Schnipsel bereitstellen? – Bob

+1

Sie können keinen X-Pfad aus dem Element generieren, da es mehrere Möglichkeiten gibt, ein Element nach X-Pfad zu suchen. – alecxe

+0

Ich möchte den xpath eines gegebenen Elements finden. Ich weiß, dass es für ein bestimmtes Element mehrere Xpath-Repräsentationen gibt, aber jede Darstellung ist für mich in Ordnung. –

Antwort

5

lxml kann automatisch eine absolute xpath für Sie mit getpath() Methode generieren.

Beispiel (mit wikipedia Haupt-Seite, XPath-Ausdruck für das Logo bekommen):

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) 

Drucke:

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