2012-09-25 70 views
17

Tôi mới vào xpath, cố gắng để có được giá trị của "giá trị" sử dụng xpath:Python Selenium: Tìm đối tượng thuộc tính sử dụng xpath

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

trong khi nó rất dễ dàng để tìm phần tử bằng cách "type="submit" như:

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

tôi đã không thể tìm ra cách để có được những giá trị tôi cần, như:

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

hơi dự kiến ​​đưa ra một lỗi:

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

Bất kỳ ý tưởng nào để giải quyết vấn đề này?

EDIT: Đường dẫn là chính xác nhưng nó "trả về" thuộc tính obj và vì nó không phải là một phần tử, nó không được phép. Tôi không thể tìm thấy một phương thức như get_attr_by_xpath() hoặc bất kỳ thứ gì tương tự.

+0

có lẽ đây là một gợi ý ngớ ngẩn nhưng không sử dụng dây liệu sửa chữa: 'r "// * [@ type = 'submit']/@ giá trị" '? –

+0

bạn đã thử một cái gì đó như 'driver.find_element_by_xpath (" // a [contains (text(), 'Search')] "). Click()' – avasal

+0

Khi tôi thử xpath của bạn với lxml nó hoạt động tốt. Tôi đã thử 'lxml.html.fromstring (s) .xpath (" // * [@ type = 'submit']/@ value ")' và o/p là '['Tìm kiếm']' – RanRag

Trả lời

28

cuối cùng tôi đã sử dụng get_attribute("value") như:

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

Nó sẽ như thế nào

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

Cập nhật này:

Với chức năng được sử dụng bởi bạn, chúng tôi chỉ có thể trích xuất các phần tử không thuộc tính của nó. Để có được thuộc tính của nó, khái niệm nên một cái gì đó giống như

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

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

+0

@ Kaipa - cho cùng một lỗi. – root

+0

@ Kaipa - cập nhật của bạn cũng là điều gần nhất tôi tìm thấy. Tuy nhiên. Có shoul được 'find_element' không phải là yếu tố hoặc một vòng lặp cho nếu sử dụng các yếu tố. – root

+0

@Jayy: yeah, Nó đã hoạt động! bạn đúng. Hàm find_elements_by_xpath() chỉ cố gắng lấy một phần tử **, chứ không phải thuộc tính **. Vì vậy, tôi có một errror khi tôi muốn Nó trả về một thuộc tính. Tôi chỉ cần đặt get_attribute() theo sau, sau đó thực hiện. Thks! – Catbuilts

2

tôi chắc chắn biết điều này đã được đăng trên 2 năm trước , nhưng tôi muốn thêm một chút vào nó đã bị bỏ lại. selen cung cấp các từ được xây dựng sẵn có thể sử dụng để kéo văn bản nằm giữa các thẻ hoặc các giá trị thuộc tính thực tế bên trong các thẻ.

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

Dưới đây là một ví dụ nhanh:

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

không muốn làm bạn thất vọng, nhưng mẫu mã mà bạn cung cấp là robotframework (câu hỏi là python và các liên kết selen), và nó sẽ trả về văn bản của nút, chứ không phải giá trị của thuộc tính. Để nhận được điều đó một lần nữa, trong cú pháp robotframework, cuộc gọi phải là '$ {attribute value} = Nhận giá trị thuộc tính $ {the locator} @ attribute_name' – Todor

Các vấn đề liên quan