2012-09-25 11 views
17

Jestem nowy XPath, starając się uzyskać wartości „wartości” za pomocą XPath:Python Selen: Znajdź atrybutów obiektu przy użyciu XPath

<input type="submit" value=" Search " class="long searchButton" style="width:190px !important;"> 

gdy jest łatwe do znalezienia elementu przez "type="submit" jak:

browser.find_elements_by_xpath("//*[@type='submit']") 

I nie były w stanie dowiedzieć się, jak uzyskać wartości potrzebne, jak:

browser.find_elements_by_xpath("//*[@type='submit']/@value") 

nieco prawdopodobnie daje błąd:

expression "//*[@type=\'submit\']/@value" is: [object Attr]. It should be an element 

Jakieś pomysły, jak rozwiązać ten problem?

EDYTOWANIE: Ścieżka jest prawidłowa, ale "zwraca" atrybut obj, a ponieważ nie jest elementem, nie jest dozwolone. Nie mogę znaleźć metody jak get_attr_by_xpath() lub czegoś podobnego.

+0

może to głupie, ale propozycja nie stosując surowe ciągi naprawić: 'r "// * [@ type = 'submit']/@ wartość" '? –

+0

wypróbowałeś coś w stylu 'driver.find_element_by_xpath (" // a [zawiera (text(), "Search")] "). Click()' – avasal

+0

Kiedy spróbowałem twojego xpath z lxml to działało dobrze. Próbowałem 'lxml.html.fromstring (s) .xpath (" // * [@ type = 'submit']/@ value ")' a o/p to '['Search']' – RanRag

Odpowiedz

28

końcu wykorzystane get_attribute("value") jak:

for i in browser.find_elements_by_xpath("//*[@type='submit']"): 
    print i.get_attribute("value") 
2

To byłoby jak to

browser.find_elements_by_xpath("//*[@type='submit']/@value").text 

Aktualizacja:

Dzięki funkcji używanych przez ciebie, możemy wyodrębnić tylko element nie jego atrybut. Aby uzyskać swój atrybut wyrażenie powinno być coś takiego

browser.find_elements_by_xpath("//*[@type='submit']").get_attribute("value") 

Ref: http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.remote.webelement.WebElement.find_elements_by_tag_name

+0

@ Kaipa - podaje ten sam błąd. – root

+0

@ Kaipa - twoja aktualizacja jest również najbliższą rzeczą, którą znalazłem. Jednak. Nie powinno być "find_element" nie elementy lub pętli for jeśli używasz elementów. – root

+0

@Jayy: tak, zadziałało! masz rację. Funkcja find_elements_by_xpath() po prostu próbuje uzyskać atrybut ** element **, a nie **. Tak więc otrzymałem errror, gdy chcę, aby zwrócił atrybut. Po prostu wstawiam get_attribute(), a potem zrobiłem. Thks! – Catbuilts

2

pewno wiedzą o tym została wysłana ponad 2 lata temu , ale chciałbym dodać trochę do tego, co zostało pominięte. selen zawiera wbudowane słowa, które można wykorzystać do przeciągnięcia tekstu znajdującego się między tagami lub rzeczywistych wartości atrybutów wewnątrz tagów.

${XPATH} xpath=(//td[@title='mytitle']/../td)[2]  

Oto krótki przykład:

${THE_NAME}=  Get Text   ${XPATH} 
+0

Nie chcę Cię zawieść, ale przykładowy kod, który dostarczyłeś, znajduje się w robocie ramowym (pytanie dotyczy Pythona i jego selenowych wiązań), i zwróci tekst węzła, a nie wartość atrybutu. Aby uzyskać ten - znowu, w składni robota ramowego, wywołanie powinno być '$ {wartość atrybutu} = Uzyskaj wartość atrybutu $ {lokalizator} @ nazwa_atrybutu' – Todor

Powiązane problemy