2011-11-28 43 views
7

Tôi đang cố gắng lấy nội dung của một số textarea ở dạng HTML sử dụng webdriver in Python.Làm cách nào để có được nội dung văn bản của một vùng văn bản với trình quản lý web?

Tôi nhận được văn bản nhưng thiếu dòng mới. Các selenium docs là khá nhiều vô ích; họ nói:

lớp selenium.webdriver.remote.webelement.WebElement (cha mẹ, id_)

[...]

văn bản: Lấu văn bản của nguyên tố này.

Tôi hiện đang làm như sau:

from selenium import webdriver 

# open the browser and web site 
b = webdriver.Firefox() 
b.get('http://www.example.com') 

# get the textarea element 
textbox = b.find_element_by_name('textbox') 

# print the contents of the textarea 
print(repr(textbox.text)) 

này in các đại diện của một chuỗi Python unicode các nội dung của textarea, trừ tất cả các dòng mới đã được thay thế bằng dấu cách. Doh!

Không chắc chắn nếu tôi đang gặp phải sự cố mã hóa văn bản, lỗi selenium/webdriver (không thể tìm thấy lỗi trong trình theo dõi) hoặc lỗi người dùng.

Có cách nào khác để thực hiện việc này không?

EDIT: Tôi vừa thử Chrome ... hoạt động tốt. Tôi đã báo cáo số bug cho trình theo dõi vấn đề của selen. Cách giải quyết của Sam (câu trả lời được chấp nhận bên dưới) hoạt động trong Firefox với một báo trước: các ký hiệu được chuyển đổi thành mã thực thể HTML trong chuỗi trả về. Đây là no big deal.

Trả lời

4

Giải pháp thay thế bạn có thể thử sử dụng ExecuteScript để lấy innerHtml. Tôi không phải là một anh chàng python, nhưng ở đây nó là trong C#:

IWebElement element = ... 
String returnText = ((IJavaScriptExecutor)webDriver).ExecuteScript("return arguments[0].innerHTML", element).ToString(); 
+0

Đề xuất tuyệt vời. Điều này hoạt động gần như hoàn hảo. Vấn đề duy nhất là các ký hiệu được dịch sang các mã thực thể HTML của chúng trong chuỗi kết quả. tức là '<' trở thành '< ', v.v. Tôi sử dụng một vài phép thuật Python cấp thấp và giảm nhẹ vấn đề đó. –

+4

Để tham khảo, mã Python tương đương là 'text = my_web_driver.execute_script (" đối số trả về [0] .innerHTML ", textarea_element)'. –

+1

Trong Python, 'xml.sax.saxutils.unescape (văn bản)' un-escapes các '&', '<' and '>' thực thể. –

7

Tôi vừa nhận được giá trị thuộc tính của văn bản thẻ. Dưới đây là một mẫu mã Java.

WebElement textarea = driver.findElement(By.id("xf-1242"));   
String text = textarea.getAttribute("value"); 
log.debut(text); 

Tôi đang sử dụng trình điều khiển Chrome và mã trên đặt văn bản (XML trong trường hợp của tôi) với dòng mới trong nhật ký. tôi đã có ý tưởng từ http://www.w3schools.com/jsref/dom_obj_textarea.asp

Jan

0

Trong Python có được yếu tố đầu tiên, và sau khi nhận được giá trị thuộc tính, chức năng trong python get_attribute ('giá trị').

from selenium import webdriver 

driver = webdriver.Firefox() 
URL = "http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_textarea" 
driver.get(URL) 
driver.switch_to.frame("iframeResult") 
# get the textarea element by tag name 
textarea = driver.find_element_by_tag_name('textarea') 

# print the attribute of the textarea 
print(textarea.get_attribute('value')) 
print(textarea.get_attribute('rows')) 
print(textarea.get_attribute('cols')) 
Các vấn đề liên quan