Python Selenium: найти атрибуты объекта с помощью xpath

Я новичок в xpath, пытаясь получить значение "value" с помощью xpath:

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

в то время как элемент "type="submit" легко найти:

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

Мне не удалось выяснить, как получить нужные значения, так как:

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

несколько ожидаемо дает ошибку:

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

Есть идеи, как это решить?

EDIT: Xpath правильный, но он "возвращает" атрибут obj и, поскольку он не является элементом, он не разрешен. Я не могу найти такой метод, как get_attr_by_xpath() или что-то подобное.

Ответ 1

Наконец, я использовал get_attribute("value") как:

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

Ответ 2

Это будет как

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

Update:

С помощью используемой вами функции мы можем извлечь только элемент, а не его атрибут. Чтобы получить его атрибут, выражение должно быть чем-то вроде этого

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

Ответ 3

Я, конечно, знаю, что это было опубликовано более 2 лет назад, но я хотел бы добавить немного к нему, которое было упущено. selenium предоставляет встроенные слова, которые можно использовать для вытягивания текста, находящегося между тегами или фактическими значениями атрибутов внутри тегов.

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

Вот краткий пример:

${THE_NAME}=       Get Text           ${XPATH}