Gibt es eine get_xpath
Methode oder eine Möglichkeit, etwas Ähnliches in Selen oder lxml.html zu erreichen? Ich habe das Gefühl, dass ich irgendwo etwas gesehen habe, aber so etwas in den Dokumenten nicht finden kann.
Pseudocode zur Veranschaulichung:
browser.find_element_by_name('search[1]').get_xpath()
>>> '//*[@id="langsAndSearch"]/div[1]/form/input[1]'
3 Antworten
Da es keine eindeutige Zuordnung zwischen einem Element und einem xpath-Ausdruck gibt, ist eine allgemeine Lösung nicht möglich. Aber wenn Sie etwas über Ihre XML / HTML wissen, kann es einfach sein, es selbst zu schreiben. Beginnen Sie einfach mit Ihrem Element, gehen Sie mit parent
den Baum hinauf und generieren Sie Ihren Ausdruck.
Dieser Trick funktioniert in 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'
Siehe Dokumentation zu getpath
.
Unabhängig von der verwendeten Suchfunktion können Sie Ihre Suche mit xpath neu formatieren, um Ihr Element zurückzugeben. Zum Beispiel,
driver.find_element_by_id('foo')
driver.find_element_by_xpath('//*@id="foo"')
Gibt genau die gleichen Elemente zurück.
Abgesehen davon würde ich argumentieren, dass es möglich wäre, Selen mit dieser Methode zu erweitern, aber fast sinnlos - Sie stellen dem Modul bereits alle Informationen zur Verfügung, die es benötigt, um das Element zu finden. Warum sollten Sie xpath verwenden (was mit ziemlicher Sicherheit der Fall sein wird?) schwerer zu lesen?) um das überhaupt zu tun?
In Ihrem Beispiel würde browser.find_element_by_name('search[1]').get_xpath()
einfach '//*@name="search[1]"'
zurückgeben. da die Annahme ist, dass Ihre ursprüngliche Elementsuche das zurückgegeben hat, wonach Sie gesucht haben.
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.